{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python for Finance (2nd ed.)\n",
    "\n",
    "**Mastering Data-Driven Finance**\n",
    "\n",
    "&copy; Dr. Yves J. Hilpisch | The Python Quants GmbH\n",
    "\n",
    "<img src=\"http://hilpisch.com/images/py4fi_2nd_shadow.png\" width=\"300px\" align=\"left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model Calibration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "uuid": "f087ed8b-b432-48a9-a791-451ac477c046"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import datetime as dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pylab import mpl, plt\n",
    "plt.style.use('seaborn')\n",
    "mpl.rcParams['font.family'] = 'serif'\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "uuid": "1d45b83a-110e-4c94-9404-859554d3f2d7"
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append('../')\n",
    "sys.path.append('../dx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "dax = pd.read_csv('../../source/tr_eikon_option_data.csv',\n",
    "                 index_col=0)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "for col in ['CF_DATE', 'EXPIR_DATE']:\n",
    "    dax[col] = dax[col].apply(lambda date: pd.Timestamp(date))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 115 entries, 0 to 114\n",
      "Data columns (total 7 columns):\n",
      " #   Column      Non-Null Count  Dtype         \n",
      "---  ------      --------------  -----         \n",
      " 0   Instrument  115 non-null    object        \n",
      " 1   CF_DATE     115 non-null    datetime64[ns]\n",
      " 2   EXPIR_DATE  114 non-null    datetime64[ns]\n",
      " 3   PUTCALLIND  114 non-null    object        \n",
      " 4   STRIKE_PRC  114 non-null    float64       \n",
      " 5   CF_CLOSE    115 non-null    float64       \n",
      " 6   IMP_VOLT    114 non-null    float64       \n",
      "dtypes: datetime64[ns](2), float64(3), object(2)\n",
      "memory usage: 7.2+ KB\n"
     ]
    }
   ],
   "source": [
    "dax.info()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CF_DATE</th>\n",
       "      <th>EXPIR_DATE</th>\n",
       "      <th>PUTCALLIND</th>\n",
       "      <th>STRIKE_PRC</th>\n",
       "      <th>CF_CLOSE</th>\n",
       "      <th>IMP_VOLT</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Instrument</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>.GDAXI</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>NaT</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12500.47</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX105000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>10500.0</td>\n",
       "      <td>2040.80</td>\n",
       "      <td>23.59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX105000S8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>PUT</td>\n",
       "      <td>10500.0</td>\n",
       "      <td>32.00</td>\n",
       "      <td>23.59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX108000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>10800.0</td>\n",
       "      <td>1752.40</td>\n",
       "      <td>22.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX108000S8.EX</th>\n",
       "      <td>2018-04-26</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>PUT</td>\n",
       "      <td>10800.0</td>\n",
       "      <td>43.80</td>\n",
       "      <td>22.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX110000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>11000.0</td>\n",
       "      <td>1562.80</td>\n",
       "      <td>21.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX110000S8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>PUT</td>\n",
       "      <td>11000.0</td>\n",
       "      <td>54.50</td>\n",
       "      <td>21.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   CF_DATE EXPIR_DATE PUTCALLIND  STRIKE_PRC  CF_CLOSE  \\\n",
       "Instrument                                                               \n",
       ".GDAXI          2018-04-27        NaT        NaN         NaN  12500.47   \n",
       "GDAX105000G8.EX 2018-04-27 2018-07-20       CALL     10500.0   2040.80   \n",
       "GDAX105000S8.EX 2018-04-27 2018-07-20       PUT      10500.0     32.00   \n",
       "GDAX108000G8.EX 2018-04-27 2018-07-20       CALL     10800.0   1752.40   \n",
       "GDAX108000S8.EX 2018-04-26 2018-07-20       PUT      10800.0     43.80   \n",
       "GDAX110000G8.EX 2018-04-27 2018-07-20       CALL     11000.0   1562.80   \n",
       "GDAX110000S8.EX 2018-04-27 2018-07-20       PUT      11000.0     54.50   \n",
       "\n",
       "                 IMP_VOLT  \n",
       "Instrument                 \n",
       ".GDAXI                NaN  \n",
       "GDAX105000G8.EX     23.59  \n",
       "GDAX105000S8.EX     23.59  \n",
       "GDAX108000G8.EX     22.02  \n",
       "GDAX108000S8.EX     22.02  \n",
       "GDAX110000G8.EX     21.00  \n",
       "GDAX110000S8.EX     21.00  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dax.set_index('Instrument').head(7)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "initial_value = dax.iloc[0]['CF_CLOSE']  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "calls = dax[dax['PUTCALLIND'] == 'CALL'].copy()  \n",
    "puts = dax[dax['PUTCALLIND'] == 'PUT '].copy()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "calls.set_index('STRIKE_PRC')[['CF_CLOSE', 'IMP_VOLT']].plot(\n",
    "    secondary_y='IMP_VOLT', style=['bo', 'rv'], figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch21/dx_cal_01.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = puts.set_index('STRIKE_PRC')[['CF_CLOSE', 'IMP_VOLT']].plot(\n",
    "    secondary_y='IMP_VOLT', style=['bo', 'rv'], figsize=(10, 6))\n",
    "ax.get_legend().set_bbox_to_anchor((0.25, 0.5));\n",
    "# plt.savefig('../../images/ch21/dx_cal_02.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Calibration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Relevant Market Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "limit = 500  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "option_selection = calls[abs(calls['STRIKE_PRC'] - initial_value) < limit].copy()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 20 entries, 43 to 81\n",
      "Data columns (total 7 columns):\n",
      " #   Column      Non-Null Count  Dtype         \n",
      "---  ------      --------------  -----         \n",
      " 0   Instrument  20 non-null     object        \n",
      " 1   CF_DATE     20 non-null     datetime64[ns]\n",
      " 2   EXPIR_DATE  20 non-null     datetime64[ns]\n",
      " 3   PUTCALLIND  20 non-null     object        \n",
      " 4   STRIKE_PRC  20 non-null     float64       \n",
      " 5   CF_CLOSE    20 non-null     float64       \n",
      " 6   IMP_VOLT    20 non-null     float64       \n",
      "dtypes: datetime64[ns](2), float64(3), object(2)\n",
      "memory usage: 1.2+ KB\n"
     ]
    }
   ],
   "source": [
    "option_selection.info()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CF_DATE</th>\n",
       "      <th>EXPIR_DATE</th>\n",
       "      <th>PUTCALLIND</th>\n",
       "      <th>STRIKE_PRC</th>\n",
       "      <th>CF_CLOSE</th>\n",
       "      <th>IMP_VOLT</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Instrument</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>GDAX128000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12800.0</td>\n",
       "      <td>182.4</td>\n",
       "      <td>12.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX128500G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12850.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>12.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX129000G8.EX</th>\n",
       "      <td>2018-04-25</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12900.0</td>\n",
       "      <td>142.9</td>\n",
       "      <td>12.36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX129500G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12950.0</td>\n",
       "      <td>125.4</td>\n",
       "      <td>12.21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX130000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>13000.0</td>\n",
       "      <td>109.4</td>\n",
       "      <td>12.06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   CF_DATE EXPIR_DATE PUTCALLIND  STRIKE_PRC  CF_CLOSE  \\\n",
       "Instrument                                                               \n",
       "GDAX128000G8.EX 2018-04-27 2018-07-20       CALL     12800.0     182.4   \n",
       "GDAX128500G8.EX 2018-04-27 2018-07-20       CALL     12850.0     162.0   \n",
       "GDAX129000G8.EX 2018-04-25 2018-07-20       CALL     12900.0     142.9   \n",
       "GDAX129500G8.EX 2018-04-27 2018-07-20       CALL     12950.0     125.4   \n",
       "GDAX130000G8.EX 2018-04-27 2018-07-20       CALL     13000.0     109.4   \n",
       "\n",
       "                 IMP_VOLT  \n",
       "Instrument                 \n",
       "GDAX128000G8.EX     12.70  \n",
       "GDAX128500G8.EX     12.52  \n",
       "GDAX129000G8.EX     12.36  \n",
       "GDAX129500G8.EX     12.21  \n",
       "GDAX130000G8.EX     12.06  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "option_selection.set_index('Instrument').tail()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnMAAAFzCAYAAABVWI+TAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzde3yU5Z3H/U+SCUoM4ECCoraVBHLZbBW1tYfVGjECoujTQBUqatnCbrRKk6qxpsoW8YBaqUQrNru6Zetu8bHieFZs14faWiwVqrYaf/F8VgjGAjkwyWSeP+ZOTMLkRGYyM8n3/Xrxmrl/9+G6kpskv7nu65AWDocRERERkdSUnugKiIiIiMi+UzInIiIiksKUzImIiIikMCVzIiIiIilMyZyIiIhIClMyJyIiIpLCfImuAMD27bs0P4qIiIikhNzcMWmJrkNnapkTERERSWFK5kRERERSmJI5ERERkRSmZE5EREQkhSmZExEREUlhSuZEREREUpiSOREREZEUpmROREREJIUpmRMREYmTQMBHUVEWkyZlU1SURSCQFHP1yzCj/1UiIiJxEAj4KC0d3bFdU5PhbTdRUtK6z9etq6tj3bpfMWbMWFpaWnjzzTc49tgvk5k5ijvuuJVTTjkVv98PwEsv/Z0LL7yYqVNd1Gv9+c+b+POf/8SYMWPZvXsX27ZtY+HC8znooINZs+ZWNm9+lqVLf8gpp8zqct4777zF/ff/hjFjxgKwe/duvvvdxRx44IEAPPDAfbz22qv4/eP54IP3ycnJ5cILl7J587OsWXMrOTk5fPGL/wTABx+8T1HRyZx44kn7/D0Z6YZ9Mjdu7hzSGhsIHZ5HKC+f0GTvNS+fsH98oqsnIiLD1OrVo6LGq6pG7XMyFwwGueKKS7j++p8yceJBAHzyyQ6uuupHrFlzJ3ff/Uvmzv02eXlTAHjxxefx+ydEvdZf/7qFBx+8n+uuu4m0tMjqVPff/xtefPF5zj77HGbPnsMbb7y+VyJXV1fHsmWVrFnznxxwQDYAb7zxOpWVl/Dzn/8nzc1N3HnnL3j44d+SlpZGa2srt9xyEwBf/erX+e1vn+CII77IvHnzAXjvvXdpaWnZp+9HMnPOHQxcC0wzs+O82CjgUqABKAR2mNmVUc49FzgGCAGvm1l1b2UN+2QuOGs22csqydy6pUt8T/EMdq5bn6BaiYjIcFdbG70nU0/x/vjTn/7AwQdP6kjkAMaPn8B11/10r2MffvgBjjjii+Tk5ES91rp1/8O3vjWvI5EDOPPMEpqbm3utwyOPPMBxx32tI5EDyMvLJyPDx4svPs8//dORhMNh7rnnf5k9ew4HHnggFRU/jnqtv//9b7zzzlucdtoZvZaZok4AHgSO7hT7EfB7M3sawDl3VPeTnHOHAZcBx5hZ2Dn3F+fcU2b2ak8FDfs+c/ePPocgmV1iLfh44MSbElQjEREZCQoK2gYU74/33nuXCRP2bmlrf6wK8L//+99UVa3i//7vyV6v9f777zJ+fNdr+Xw+srOzezgj4uOPP2LChL0TxAkTJvD+++8yatQobrvtP3jtNePcc7/NhRcu5tln/9Tl2I0bn6KqahW/+c2vey0rlZnZfcCubuFzgMnOuXLn3DXAR1FOnQVsMbOwt70JmN1bWWnhcLi3/UOitTUU9vky4lfAt74FDz742fbSpXDrrfErT0RERIaztL4PAefcScDNZvYVb7sJKDWzXznnTgGuMrOTup1TCRxkZuXe9rUAZnZVT+UkxWPW+vrGuF170qRs5oQW8QCRZG4H45l623J23RHmgw92x61cERGRQMBHVdUoamvTKShoo6wsOKjBD83NzZSW/gs331xFbu5EIDIY4fbbq7jxxlv49rfP4KabbunoM9ebZ5/9E4888gDXXHNjx6PWtWvv5OCDJ3Hqqaezdetz3H57FXfddXfHOffe+2tOPnkGl176g736zF1//dVUV/+Sbds+Zu3aO6ms/HcAWltbOeOMmdxzz/2MG3cg1123vEufubq67XzyyQ4KCo7Y5+/LUMvNHbOvp+4E/uy9/yPwTedchpmFOh2zDeh8A8cCr/V20aRI5uKpoKCNR2tOZxu5TGQ7y1lOPeMpLAj1fbKIiMgglJS0Dip5627//fdn1apbueee/+WAAw6gpaWFTz7ZwWWXVfLIIw+ye/duHnoowNy5Z/P5z3+h12t9/ev/DMDPf34LBxyQza5du/D7/cyadRr19fVs2PAYO3bUsXbtnR3nvP/+e5x99jmsWLGS//iPNYwdOw6IJJk333wrGRkZHHBANjt3/oNbb13FAQdk8+GHH3DhhUsZN+5AnntuM6+//ir/+Mc/2LUr8gSyrq6OwsJ/SqlkbhD+D8gDDPgCkcENIedcOnCYmb0DbACWOufSvEet3wBu6+2iSfGYdfv2XXGrRPvQ8FsoZyZPchQvEsJHdfXghoaLiIjIyJSbO6bPx6zOuSLgfOBU4A5gFTAeuBp4Hfgi8HMz2+ycOxq428yO9M49F/gKkdGstX2NZh32yRxEEroNN77Mnrc+5s0jZg26mVtERERGrv4kc0NpRCRzIiIiI9V7773Liy8+3yV26KGfY9q0o3s4Q/qiZC4KJXMiIiKSKpItmRv288yJiIiIDGdK5kRERERS2LCfmkRERCQRtDa4DBUlcyIiInGgtcEHp71Pf+e1Y+MlFAqRkRHHlajiTAMgRERE4iCtro4J0xxpLS0dsbDPR/3vnyU0tWCfrvnyy39nzZpbaW1t5YILLgbgzjt/wYcffsA99wTIzPxsLfI1a25lw4bHWLLkAk444UTWrLmVzZuf5cwzSwgGg7z33jtcdlkl/m6thI2NjaxatZJnn/0Ty5Zd0zG5cCBwHxs2PMall/6Igw8+hLvv/iX77bcfAPX19XzrW/OYMmUq9fWfdJS1dOkPOeWUWQB8//tLKCz8Ejt3/oPf//4pzjijBIB//ONTrrxyeZc6fPLJDn71q19y0UVlXb6mds89t5lnn/0TF19c3uP36o03XmP16ps59dTTOe20M7rs27VrF3/4w8aO+HPPbeadd95m7tyz+rwHoAEQIiIiI0I4J4dg8cwusaZFi/c5kQMoLPwSxxzzZb70paM4+uhjOfroYznmmC8zfvx4Hn74gY7j6uvrqal5iZycXM4441v4/eOZPXsOOTm5LF5cyoUXLiUvbwrr1t29VxlZWVlcfvmVhEJtHHLIIR3xAw7I5t/+7ftMmVLAj370Q04++RQWLy5l8eJSLrqojOuvv5rt27d1Kas9kQM4/fQzufjichYsWMiYMWO5+OJyLr64nKOPPnavOlx77U84++zvRE3kAL7yla9y0UVlvX6v8vKmMG3aMVH37d69i8cee7jL9d555y3+8pdne71mslIyJyIiEifNCxZ2vG/z+2msqIxLOYsW/Sv/8z9rCQaDANx//72UlPTeylRXV8e4cQdG3bfffvszc+apPPhgoCP2179u4ZhjvsyLL77Anj17OOKIwo59o0eP5vjjv9kloezu9NPP7Ff8vffe5ZNPPuGQQw4FIi2Mc+eeztq1d3L55eVUVa3ittt+xtKlpQAEg0FWrFjGbbf9jF/+8j8599yzue22n3Vc75VXXubWW1dxwQXf45VXXgbgoYcCfPTRh9x1VzV///vfADj++G8SCKTm428lcyIiInESnDGLtpwcABoqKuM28CEvL58vfekoHnrofj75ZAfp6ekceODeiVpd3XbuuquaNWuqmDhxImeffU6P1zzzzLk88cQjBINB3nnnbT73uc+TlpbGxx9/yIQJOXsdP2HCBN5//91Bfy1vvvk6ubm5Hdvf//4P+PTTeubOPZuVK1dx2mlz+Pa3F3Tsf/jhB8jKymLp0kv47ncX09jY0GX/AQdk84MfXMr8+efw+OOPeF9bCQcfPInFi0v50peOBCAnZyJvvvn6oOufCBoAESMatSQiInvJzKR57lmM2vgUzYuWxLWof/mXf+XSS5fy8ccfs3Dhd3njjdf2Oqb9MWt/TJkylUMP/RwbNz7Fm2++3pH4HXTQJHbsqNvr+B07dpCbe9DgvgggGGzZazCC3z+esWPHAjB1quPDDz/o2Pfmm29w2GGfAyA9PZ1Jkw7pcm77vnHjDqSxsbHHcn0+H3v27Bl0/RNBLXMxEpw1m8ytW9j//t9wwM03MPaif8M/u5gx3//XRFdNREQSqHn+Qhquvg588W0/mTw5j2nTjsHn80VtldsXZ55Zwv3330tDw278fj8ARx01jVGjRnU8sgRobm7mmWee5swzS3q81r33/rpfZR500EHs3LmzS6y3Ea2TJ0/m3XffAaCtra1LotfTuenpn6U/r75qAOzcuZODDjq4X3VMNkrmYqR53nzC3Tpqhn0+GlasTFCNREQkGYSOPGqvgRD76pVXXuaFF/7KSy/9jRdeeL5je/36e2ltbeUnP7mW0tKLqK+vZ8OGx9ixo44nn3y8y/Y99/xPv8s75ZRZvPXWG5x44vSOWFpaGjfdtJqnnvodd91VzV13VfOLX9zGlVdezSGHHNqlrLVr7+z49+qrtezZ08xDDwXYvXs3jzzyYNQyv/jFf+LTT+s7WskefvgBdu/e3aXegcBv+Pjjj9i06RnmzPkWDQ0NrF59M+vW3c24ceNIS0vjnXfe5oUX/sozzzxNXV0dGzY8xuuvv8orr7zMhAk5jBo1ittu+xmvvFIDwEsvvchJJ528L7cl4TQ1SQyNPf877PfEox3bjUtKabj+pwmskYiISOrZvPlZtm59rmP6ld40Njby4YcfkJ8/BYDzzjub//qv/+1xJGw0H330EXfccStXXXV1v85LtqlJ1GcuhjZOPo9ZRJK5TzPG82DhMk5LcJ1ERERSzVe/+nUmTTqEPXv2dMxl15M9e/awZs2tHHvsl/nkkx1897uLB5TIATQ3N7Fs2Qp8cX4UHi9qmYuRQMDHRaU+3udQJrKdpdzKz1lKdXUTJSWtia6eiIhIVJ3nW2vXfZJd6SrZWub6lcw55xzwHaAJKAKWA68BNwBvAFOBH5vZx97xFcBYwA88aWYP9Xb94ZDMFRVlUVOTwS2UM5MnOYoXCeGjsDDExo09j54RERGR1JJsyVyfAyCccxnAz4AVZnYjsBh4E7ge+J2Z3QA8ANzsHf81YLqZLQN+CKxyzsVmWE0Sq62NfCvXsohLWUXIe4LdHhcRERGJh/5kGscBacBS51wlcAZQB5wObPKOecbbBpjTHjezFqAGODGGdU5KBQVtALzA0TzB7L3iIiIiIvHQn2TuC8A3gLVmtpJIYvZdYCKwyztmJ+B3zvm6xdv3TYxZjZNUeXkwarysLHpcREREJBb6k8ztBF4xs394238ETgK2AWO82Fig3sxau8Xb922LSW2TWElJK9XVTRQWhvD5whQWhjT4QUREROKuP2Nw/wxMcM5lmFmISEtdLdBMpMXuXeB4oH2CtUeAnwB4LXWFwNMxrndSKilpVfImIiIiQ6q/o1lLgJOB7cDngaXAaOBG4G0gH7ii22hWv/fv8ZEwmlVERERGhmQbzap55kREREQGINmSOc2bISIiIpLClMyJiIiIpDAlcyIiIiIpLDVXlB3hxs2dQ1pjA6HD8wjl5ROa7L3m5RP2j0909URERGQIKZlLQcFZs8leVknm1i1d4nuKZ7Bz3foE1UpEREQSQaNZU1BaXR0TpjnSWlo6YmGfj/rfP0toakECayYiIjL89Wc0q3PuYOBaYJqZHefFlhNZeKHddWb22yjnvgW85W2+b2YLeytLLXMpKJyTQ7B4Jvs98WhHrGnRYiVyIiIiyeME4EHg6M5BMzupH+euNbPl/S1IyVyKal6wsCOZa/P7aayoTHCNREREpJ2Z3eecO6l73Dl3JbAHyABuM7PGKKef6Jy7nMjyqI+b2Z96K0ujWVNUcMYs2nJyAGioqNTABxERkeT3G2C1md0M7AJu6+G4K8zsJmAl8F/OuSm9XTQpWub8/ix8voxEVyP1LFwITz7JmIofMsaXFLdSREREemBmL3XafAqo6OG4zd5ro3PueeB44LWerpsUGUB9fbQWRulLxplnkfH1bxKsb0p0VUREREaM3Nwx+3Sec+6nZtaewE3FS9Ccc+nAYWb2jnOuGMg0sye846YAr/d23aRI5mTgAgEfq1d/ndradAoK2igvD1JS0proaomIiAjgnCsCzgMmOeeuAlYBrc65KmAbcCRwkXf4UcDdXmwbsNw5dyxwCLDezP7YW1mamiQFBQI+SktH7xWvrm5SQiciIhJn/ZmaZChpAEQKWr16VNR4VVX0uIiIiAxfSuZSUG1t9NvWU1xERESGL/31T0EFBW0DiouIiMjwpWQuBZWXB6PGy8qix0VERGT4UjKXgkpKWqmubqKwMITPF6awMKTBDyIiIiOURrOKiIiIDIBGs4qIiIhIzCiZExEREUlhWgFCejVu7hzSGhsIHZ5HKC+f0GTvNS+fsH98oqsnIiIy4imZk14FZ80me1klmVu3dInvKZ7BznXrE1QrERERaafHrNKr5nnzCWdmdomFfT4aVqxMUI1ERESkMyVz0qtwTg7B4pldYk2LFhOaWpCgGomIiEhnSuakT80LFna8b/P7aayoTGBtREREpDMlc9Kn4IxZtOXkANBQUamBDyIiIklEyZz0LTOT5rln0VrgaF60JNG1ERERkU40mlX6pXn+QlqmF4NP/2VERESSiZbzEhERERkALeclIiIiIjGjZE76FAj4KCrKYtKkbIqKsggE9KhVREQkWeivsvQqEPBRWjq6Y7umJsPbbqKkpDVxFRMRERFALXPSh9WrR0WNV1VFj4uIiMjQUjInvaqtjf5fpKe4iIiIDC39RZZeFRS0DSguIiIiQ0vJnPSqvDwYNV5WFj0uIiIiQ0vJnPSqpKSV6uomCgtD+HxhCgtDVFdr8IOIiEiy0KTBkhTGzZ1DWmMDocPzCOXlE5rsveblay1YERFJKsk2abCmJpGkEJw1m+xllWRu3dIlvqd4BjvXrU9QrURERJKfHrNKUmieN59wZmaXWNjno2HFygTVSEREJDUomZOkEM7JIVg8s0usadFiQlMLElQjERGR1KBkTpJG84KFHe/b/H4aKyoTWBsREZHUoD5zkjSCM2bRlpNDel0dDRWVGvggIiIpyzl3MHAtMM3MjvNiy4GTOh12nZn9Nsq55wLHACHgdTOr7q0sJXOSPDIzaZ57FqM2PkXzoiWJro2IiMhgnAA8CBzdOWhmJ/V2knPuMOAy4BgzCzvn/uKce8rMXu3pHCVzklSa5y+kZXox+PRfU0REUpeZ3eecO6l73Dl3JbAHyABuM7PGbofMAraYWfu0bZuA2UByJ3N+fxY+X0aiqyHJ4OTjE10DERGRePkN8JaZNTjnvg/cBizudsxEYFen7Z1erEdJkczV13dPSkVERESSU27umH06z8xe6rT5FFAR5bBtwJRO22OB13q7br+SOefcs0Cztxkys2Ln3HjgBuANYCrwYzP72Du+wivcDzxpZg/1pxwRERGR4co591Mza0/gpuIlac65dOAwM3sH2AAsdc6leY9av0GkBa9H/W2Ze8LMlneLXQ/8zszudc6dAdwMnOec+xow3cxOc85lAi875542s0/7WZaIiIhISnPOFQHnAZOcc1cBq4BW51wVkda3I4GLvMOPAu4GjjSz95xzNwO3OOdCwJ29DX6Afq7N6pxbD2wGRgN/MbNHnXPvAv9sZu96rXSvmdl459w1QNDMrvHOfcirSI+tc1qbVURERFJFsq3N2t9Jg280sxuBa4AfO+dOpGsHvZ2A3znnYx867okABAI+ioqymDQpm6KiLAKBpOjSKSIiktT6lcyZ2WbvNQT8AZhOpImwvQfgWKDezFq7xdv3bYtVhWV4CgR8lJaOpqYmg1AojZqaDEpLRyuhExER6UOfyZxz7gjnXOdhs+0d9h4l0ikP4HhvG+CR9rjXUlcIPB2rCsvwtHr1qKjxqqrocREREYnos8+cc+4Q4HZgK5FWtkzgEuBA4EbgbSAfuKLbaFa/9+/xvkazqs+cTJqUTSi0dxcEny/MBx/sTkCNREREoku2PnP9GgARb0rmpKgoi5qavSeOLiwMsXFjbOchHDd3DmmNDYQOzyOUl09osveal6/1YEVEpE/JlsypQ5IkhfLyIKWlo/eKl5UFY15WcNZsspdVkrl1S5f4nuIZ7Fy3PubliYiIxFN/R7OKxFVJSSvV1U0UFobw+cIUFoaorm6ipKQ15mU1z5tPODOzSyzs89GwYmXMyxIREYk3PWaVEWns+d9hvyce7dhuXFJKw/U/TWCNREQkVSTbY1a1zMmI1LxgYcf7Nr+fxorKBNZGRERk3ymZkxEpOGMWbTk5ADRUVGrgg4iIpCwlczIyZWbSPPcsWgsczYuWJLo2IiIi+0yjWWXEap6/kJbpxeDTj4GIiKQuDYAQERERGQANgBARERGRmFEyJyIiIpLClMyJiIiIpDAlcyIiIiIpTMmciIiISApTMiciIiKSwpTMyYgUCPgoKspi0qRsioqyCAQ015yIiKQm/QWTEScQ8FFaOrpju6Ymw9tuoqSkNXEVExER2QeaNFhGnKKiLGpqMvaKFxaG2LixMaZljZs7h7TGBkKH5xHKyyc02XvNy9d6sCIiKSrZJg1Wy5yMOLW10XsX9BQfjOCs2WQvqyRz65Yu8T3FM9i5bn3MyxMRkZFHfeZkxCkoaBtQfDCa580nnJnZJRb2+WhYsTLmZYmIyMikZE5GnPLyYNR4WVn0+GCEc3IIFs/sEmtatJjQ1IKYlyUiIiOTkjkZcUpKWqmubqKwMITPF6awMER1dfwGPzQvWNjxvs3vp7GiMi7liIjIyKQBECLx1tLChGmO9Lo6dl1/E81LLkh0jUREZBCSbQCEWuZE4i0zk+a5Z9Fa4GhetCTRtRERkWFGo1lFhkDz/IW0TC8Gn37kREQktvSYVURERGQAku0xq5oJRERERGLMOXcwcC0wzcyO67bvKqDczHJ6OPct4C1v830zWxjtuHZK5kRERERi7wTgQeDozkHn3EmAv49z15rZ8v4WpAEQIiIiIjFmZvcBuzrHnHMHAQuA2/o4/UTn3OXOuWucc//cV1lJ0TLn92fh8+29VqaIiIjIcOCcSweuBy4DxvVx+BVmttk5lwVsdc7NMbPXejo4KZK5+vrYLm4uIiIiEi+5uWP25bRjgRaglMhj1tHOuSuA9Wb2aucDzWyz99ronHseOB5I7mROREREZDgzs+eA5wCcc4cDi83sBm87HTjMzN5xzhUDmWb2hHfqFOD13q6tZE5EREQkxpxzRcB5wCRv9OoqM2tyzk0BLiDSMncVcAswFbgbOBLYBix3zh0LHEKk5e6PvZWleeZEholxc+eQ1thA6PA8Qnn5hCZ7r3n5hP3jE109EZFhQ/PMiYwwgYCP1atHUVubTkFBG+XlQUpKWmNeTnDWbLKXVZK5dUuX+J7iGexctz7m5YmISHJQy5xIHAUCPkpLR+8Vr65uinlCl1ZXx4RpjrSWlo5Y2Oej/vfPEppaENOyRERGsmRrmdM8cyJxtHr1qKjxqqro8cEI5+QQLJ7ZJda0aLESORGRYU7JnEgc1dZG/xHrKT5YzQs+W/Glze+nsaIyLuWIiEjyUDInEkcFBW0Dig9WcMYs2nIiS/01VFRq4IOIyAigZE4kjsrLg1HjZWXR44OWmUnz3LNoLXA0L1oSnzJERCSpaDSrSBxFBjk0UVX12WjWsrL4jGZt1zx/IS3Ti8GnH28RkZFAo1lFREREBkCjWUVEREQkZpTMiYiIiKQwJXMiIiIiKUzJnIiIiEgKUzInIiIiksKUzImIiIiksH5PROWcGw38GXjSzC5zzo0HbgDeAKYCPzazj71jK4CxgN87/qGY11xEREREBjRp8LXAXzttXw/8zszudc6dAdwMnOec+xow3cxOc85lAi875542s09jV20RSZRxc+eQ1thA6PA8Qnn5hCZ7r3n5Wj5MRCQB+pXMOefOA54BjgKyvfDpwHXe+2eA//bezwE2AZhZi3OuBjgRUOucyDAQnDWb7GWVZG7d0iW+p3gGO9etT1CtRERGrj77zDnnCoEvmtn93XZNBHZ573cCfuecr1u8fd/EGNRVRJJA87z5hDMzu8TCPh8NK1YmqEYiIiNbfwZAlADNzrkrgBOArzrnyoFtwBjvmLFAvZm1dou379sWuyqLSE8CAR9FRVlMmpRNUVEWgUDs12cN5+QQLJ7ZJda0aDGhqQUxL0tERPrW5296M2t/lIpzbn8g28xWO+eOAL4BvAscDzzqHfYI8BPveB9QCDwd43qLSDeBgI/S0tEd2zU1Gd52EyUlrTEtq3nBQvZ7IvIj3+b301hRGdPri4hI/6WFw/1b4945Nw+4CBgF3A5sAG4E3gbygSu6jWb1e/8e72s06/btu/pXCRHpUVFRFjU1GXvFCwtDbNzYGNvCWlqYMM2RXlfHrutvonnJBbG9vohIEsvNHZOW6Dp01u9kLp6UzIkM3qRJ2YRCe/9+8fnCfPDB7piXd8BVP2LUxqeo37gJfLF/nCsikqySLZnTb2CRYaKgoC1qy1xBQVtcymuev5CW6cVK5EREEkwrQIgME+XlwajxsrLo8cEKHXnUXgMhRERk6CmZExkmSkpaqa5uorAwhM8XprAwRHV17Ac/iIhIclGfOREREZEBSLY+c2qZExEREUlhSuZEREREUpiSOREREZEUpmROREREJIVpgigRERGRGHPOHQxcC0wzs+O67bsKKDeznB7OPRc4BggBr5tZdW9lKZkTkaQ1bu4c0hobCB2eRygvn9Bk7zUvn7B/fKKrJyLSmxOAB4GjOwedcycRWe40KufcYcBlwDFmFnbO/cU595SZvdrTOUrmRCRpBWfNJntZJZlbt3SJ7ymewc516xNUKxGRvpnZfV7i1sE5dxCwALgB+G4Pp84CtphZ+7Rtm4DZQHInc35/Fj7f3ssQicgIV7oYVvw7tLR8FvP52O/nt5KbOyZx9RIRGSDnXDpwPZFWt3G9HDoR2NVpe6cX61FSJHP19Y2JroKIJKX9GVs8kwFCQ50AAB3qSURBVP2eeLQj0rhoMQ0TDoXtu3o5T0Qkfvbxw+SxQAtQSuQx62jn3BXA+m6PULcBUzptjwVe6+3CGs0qIgMWCPgoKspi0qRsioqyCATi97mwecHCjvdtfj+NFZVxK0tEJF7M7Dkzu8DMbgDuAJrM7AYze9U5l+6c+7x36Abgy8659lUmvgE83tu1tZyXiAxIIOCjtHT0XvG4rQPb0sKEaY70ujp2XX8TzUsuiH0ZIiID0J/lvJxzRcD5wKlEkrdVZtbknJsCXABcCKwEbgGmAneb2ZHeuecCXyEymrW2r9GsSuZEZECKirKoqdm7j2thYYiNG+PTZeKAq37EqI1PUb9xE/iSoneIiIxgybY2q34risiA1NZG753RUzwWmucvpGV6sRI5EZEo9JtRRAakoKAtastcQUFb3MoMHXkUIY6K2/VFRFKZBkCIyICUlwejxsvKosdFRCS+lMyJyICUlLRSXd1EYWEIny9MYWEofoMfRESkTxoAISIiIjIAyTYAQi1zIiIiIilMyZyIiIhIClMyJyIiIpLClMyJiIiIpDAlcyIiIiIpTJMGi4gA4+bOIa2xgdDheYTy8glN9l7z8gn7xye6eiIiPVIyJyICBGfNJntZJZlbt3SJ7ymewc516xNUKxGRvukxq4gI0DxvPuHMzC6xsM9Hw4qVCaqRiEj/KJkTEQHCOTkEi2d2iTUtWkxoakGCaiQi0j9K5kQkqQUCPoqKspg0KZuioiwCgfj1DmlesLDjfZvfT2NFZdzKEhGJFfWZE5GkFQj4KC0d3bFdU5PhbcdnLdjgjFm05eSQXldHQ0WlBj6ISEpQy5yIJK3Vq0dFjVdVRY8PWmYmzXPPorXA0bxoSXzKEBGJMbXMiUjSqq2N/nmzp3gsNM9fSMv0YvDp16OIpAb9thKRpFVQ0EZNTUbUeLyEjjyKEEfF7foiIrGmx6wikrTKy4NR42Vl0eMiIiORkjkRSVolJa1UVzdRWBjC5wtTWBiiujo+gx9ERFJVWjgcTnQd2L59V+IrISIiItIPublj0hJdh87UMiciIiKSwpTMiYiIiKQwJXMiIiIiKUxTk4iIDKFxc+eQ1thA6PA8Qnn5hCZ7r3n5WnFCRPaJkjkRkSEUnDWb7GWVZG7d0iW+p3gGO9etT1CtRCSV6TGriMgQap43n3BmZpdY2OejYcXKBNVIRFKdkjkRkSEUzskhWDyzS6xp0WJCUwsSVCMRSXV6zCoiMsSaFyxkvyceBaDN76exojLBNRKRWHPOHQxcC0wzs+O8WBlwJFALHA/cYGabopz7FvCWt/m+mS3srSy1zImIeAIBH0VFWUyalE1RURaBQHw+7wZnzKItJweAhopKDXwQGZ5OAB4EOk8wvB+w1MxuAtYCK3o4d62ZneT96zWRA7XMiYgAkUSutHR0x3ZNTYa3HYflwzIzaZ57FqM2PkXzoiWxvbaIJAUzu885d1K32E2dNqcAL/dw+onOucuBMcDjZvan3srqM5lzzqUDDwN/BkYB+cD3gNHADcAbwFTgx2b2sXdOBTAW8ANPmtlDfZUjIpJIq1ePihqvqhoVl7Vgm+cvpGV6Mfj0mVpkJPEev1YCxwBzezjsCjPb7JzLArY65+aY2Ws9XbO/v0U2mdm1XiUe9Ar/JvA7M7vXOXcGcDNwnnPua8B0MzvNOZcJvOyce9rMPu3p4n5/Fj5fRj+rIiISey/39PmYDCIfjmPs5ONjf00RSXpm9hFQ5pw7GXgM+GqUYzZ7r43OueeJ9K/b92TOzNqIdODDOecDDgOMSKvcdd5hzwD/7b2fA2zyzm1xztUAJwI9ts7V1zf2VQ0RkbgqKsqipmbvD5WFhSE2btTvKBH5TG7uvn3Ac85VmNlPvc03gTwvng4cZmbvOOeKgUwze8I7bgrwem/X7Xf7vnNuFvBD4BEze845NxHY5e3eCfi9ZG8iUNPp1J1eTEQkaZWXB7v0mWtXVhZMQG1EJNU554qA84BJzrmrgFXA551zq4A6YBrQ3mn2KOBuIiNdtwHLnXPHAocA683sj72V1e9kzsw2ABucc79yzn3fK2wM8CmR/nH1ZtbqnGuPtxvrHSsikrQi/eKaqKoaRW1tOgUFbZSVBePSX05Ehj8z+z3w+27hpT0c+zyRRA4z+xswbyBl9WcARCEw2cwe9ULtzYKPAt8A3iXyLLd9/yPAT7xzfUAh8PRAKiUikgglJa1K3kQk5aSFw+FeD3DO5QM/BbYCmcAXgR8AQeBG4G0iI1yv6Daa1e/9e7yv0azbt+/qvRIiIiIiSSI3d0xa30cNnT6TuaGgZE5ERERSRbIlc1oBQkRERCSFabZKEZFhatzcOaQ1NhA6PI9QXj6hyd5rXr6WEBMZRpTMiYgMU8FZs8leVknm1i1d4nuKZ7Bz3foE1UpEYk2PWUVEhqnmefMJZ2Z2iYV9PhpWrExQjUQkHpTMiYgMU+GcHILFM7vEmhYtJjS1IEE1EpF4UDInIjLEAgEfRUVZTJqUTVFRFoFA/Hq8NC9Y2PG+ze+nsaIybmWJSGKoz5yIyBAKBHxdlg2rqcnwtpviMmFxcMYs2nJySK+ro6GiUgMfRIYhtcyJiAyh1atHRY1XVUWPD1pmJs1zz6K1wNG8aEnfx4tIylHLnIjIEKqtjf4Zuqd4LDTPX0jL9GLw6Ve+yHCkn2wRkSFUUNBGTU1G1Hi8hI48ihBHxe36IpJYeswqIjKEysuDUeNlZdHjIiJ9UTInIjKESkpaqa5uorAwhM8XprAwRHV1fAY/iMjIkBYOJ36N++3bdyW+EiIiIiL9kJs7Ji3RdehMLXMiIiIiKUzJnIiIiEgKUzInIiIiksKUzImIiIikMM0zJyIigzZu7hzSGhsIHZ5HKC+f0GTvNS9fS4iJxJmSORERGbTgrNlkL6skc+uWLvE9xTPYuW59gmolMjLoMauIyDAWCPgoKspi0qRsioqyCATi8xm+ed58wpmZXWJhn4+GFSvjUp6IfEbJnIjIMBUI+CgtHU1NTQahUBo1NRmUlo6OS0IXzskhWDyzS6xp0WJCUwtiXpaIdKVkTkRkmFq9elTUeFVV9PhgNS9Y2PG+ze+nsaIyLuWISFdK5kREhqna2ui/4nuKD1ZwxizacnIAaKio1MAHkSGiZE5EZJgqKGgbUHzQMjNpnnsWrQWO5kVL4lOGiOxFyZyIyDBVXh6MGi8rix6Pheb5C2m4+jrwabIEkaGSFg4nfo377dt3Jb4SIiLDUCDgo6pqFLW16RQUtFFWFqSkpDXR1RJJabm5Y9ISXYfOlMyJiIiIDECyJXNqBxcRERGJMefcwcC1wDQzO86LlQFHArXA8cANZrYpyrnnAscAIeB1M6vurSz1mRMRERGJvROAB4HOrXj7AUvN7CZgLbCi+0nOucOAy4DLzOxyYIlzbmpvBSmZExEREYkxM7sP2NUtdpOZNXmbU4CXo5w6C9hiZu1d0DYBs3srKykes/r9Wfh8GYmuhoiIiEhceY9fK4k8Rp0b5ZCJdE0Cd3qxHiVFMldf35joKoiIiIj0S27umH0+18w+AsqccycDjwFf7XbINiKtdu3GAq/1dk09ZhUREREZAs65ik6bbwJ5XjzdOfd5L74B+LJzrr2v3TeAx3u7rqYmERGRmAgEfKxe/dmcduXlsZ/TbtzcOaQ1NhA6PI9QXj6hyd5rXr6WD5Mh05+pSZxzRcD5wKnAHcAq4CYgCNQB04B7zOwB59zRwN1mdqR37rnAV4iMZq3tazSrkjkRERm0QMBHaenoveLV1U0xTehGV99O9rLKveJ7imewc936mJUj0ptkm2dOj1lFRGTQVq8eFTVeVRU9vq+a580nnJnZJRb2+WhYsTKm5YikEiVzIiIyaLW10f+c9BTfV+GcHILFM7vEmhYtJjS1IKbliKQSJXMiIjJoBQVtA4oPRvOChR3v2/x+Giv2fuwqMpIomRMRkUErLw9GjZeVRY8PRnDGLNpycgBoqKjUwAcZ8ZTMiYjIoJWUtFJd3URhYQifL0xhYSjmgx86ZGbSPPcsWgsczYuWxP76IilGo1lFRCTlZPztRTK2fbRX/zmRoZBso1mVzImIiIgMQLIlc3rMKiIiIpLClMyJiIiIpDAlcyIiIiIpTMmciIiISApTMiciIiklEPBRVJTFpEnZFBVlEQj4El0lkYTST4CIiKSMQMBHaenoju2amgxvO05z2omkgD6nJnHO5QPXAluBw4AdZrbCOTceuAF4A5gK/NjMPvbOqQDGAn7gSTN7qLcyNDWJiIj0R1FRFjU1GXvFCwtDbNzYmIAayUiUbFOT9Kdlbjxwj5k9COCce9k59yjwr8DvzOxe59wZwM3Aec65rwHTzew051wm8LJz7mkz+zReX4SIiIwMtbXRewf1FB+McXPnkNbYQOjwPEJ5+YQme695+VpCTJJKn8mcmf2lWygdaABOB67zYs8A/+29nwNs8s5tcc7VACcCvbbOiYiI9KWgoC1qy1xBQVvMywrOmk32skoyt27pEt9TPIOd69bHvDyRfTWgjzLOuRJgg5m9AkwEdnm7dgJ+55yvW7x938QY1FVEREa48vJg1HhZWfT4YDTPm084M7NLLOzz0bBiZczLEhmMfidzzrnpwHTgh15oGzDGez8WqDez1m7x9n3bBl9VEREZ6UpKWqmubqKwMITPF6awMER1dXwGP4RzcvZa+7Vp0WJCUwtiXpbIYPRrNKtz7nTgm0AZMMk59wXgUeAbwLvA8d42wCPAT7zzfEAh8HRsqy0iIiNVSUnrkI1cbV6wkP2eiPx5a/P7aayoHJJyRQaiP6NZvwz8HnjOCx0A3E6kD9yNwNtAPnBFt9Gsfu/f4xrNKiIiKamlhQnTHOl1dey6/iaal1yQ6BpJEki20ax9JnNDQcmciIgkqwOu+hGjNj5F/cZN4NP0rJJ8yZz+V4qIiPSief5CWqYXK5GTpKWWOREREZEBSLaWOa3NKiIi0gOtAyupQP8rRUREotA6sJIq1DInIiISxerVo6LGq6qix0USRcmciIhIFEO5DqzIYOh/pIiISBQ9rfcaj3VgRQZDfeZERESiKC8Pdukz1y4e68COmzuHtMYGQofnEcrLJzTZe83LJ+wfH/PyZHhRMiciIhJFZJBDE1VVo6itTaegoI2ysmBcBj8EZ80me1klmVu3dInvKZ7BznXrY16eDC+aZ05ERCTB0urqmDDNkdbS0hEL+3zU//5ZQlMLElgziaY/88w55w4GrgWmmdlxXuwWoBHYDUwDys3soyjnvgW85W2+b2YLeytLLXMiIiIJFs7JIVg8k/2eeLQj1rRosRK51HYC8CBwdKdYg5ldBeCc+xFwJbA0yrlrzWx5fwvSAAgREZEk0Lzgs8aXNr+fxorKBNZGBsvM7gN2dYtd1WkznUgLXTQnOucud85d45z7577KSoqWOb8/C58vI9HVEBERSZxzvg0VZbB9O+lXX01OwRcSXSOJE+fcgcBMYF4Ph1xhZpudc1nAVufcHDN7rafrJUUyV1/fmOgqiIiIJFQg4GP/1u/wFX7L/DX/xtL9tNJEssrNHbPP5zrnxgFrgO+Z2SfRjjGzzd5ro3PueeB4oMdkTo9ZRUREEqx96bCf1f8Ll7KKv7+yH6Wlo7UW7DDjnMsBbgcqzOxN59w8L57unPu8977YOXdqp9OmAK/3dl2NZhUREUmwoqIsamr27m5UWBhi40Y9vUo2/RzNWgScD5wK3AGsAp4h8lS0vUVul5md4Zw7GrjbzI50zh0JLAe2AIcQGc26sreylMyJiIgk2KRJ2YRCe+cHPl+YDz7oqY+8JEp/krmhpMesIiIiCaalw2QwlMyJiIgkWHl59CXC4rF0mAw/6lkpIiKSYEO5dJjWgR1+1GdORERkBBldfTvZy/aekFjrwPaf+syJiIhIwjTPm084M7NLLOzz0bCi1wGTksSUzImIiIwg7evAdqZ1YFObkjkREZERRuvADi9K5kREREaYextPZ0dGLgArR/2E+zdOTHCNZDA0mlVERGQECQR8lH5/NA2cw0ye5CcfX0So1AdoLdhUpdGsIiIiI0j70mHTeJ5JfMgTzAa0dNhAJNtoViVzIiIiI4iWDhu8ZEvm1GdORERkBNHSYcOPkjkREZERREuHDT8aACEiIjKCDNXSYVo2bOioz5yIiIjE3HBeNkx95kRERGTY07JhQ0fJnIiIiMRcOCeHtwtndYm99M1/1bJhcaBkTkRERGIuEPBR/sLiju0djOfE/+9aAgF11481JXMiIiISc6tXj+JRTmcbkWXDlrOcesZTVTUqwTUbfpTMiYiISMzV1qbTSia/5hxe5ovcwYUdcYkttXWKiIhIzBUUtFFTk8FaFrGBWYS8lEOTE8ee0mMRERGJufbJiV/g6I71X0GTE8eDkjkRERGJuZKSVqqrmygsDOHzhSksDFFd3RTzyYlFkwaLiIiIDEiyTRqsPnMiIiKS0kb60mFK5kRERCSlBWfNJntZJZlbt3SJD4elw/pDfeZEREQkpd0/+hyCdF06rAUfD5x4U4JqNLSUzImIiEhKu+GuQ3mM07rE7uBCVvy/RyaoRkNLyZyIiIiktNradNayqGN7B+NZzvIRM0HxyPgqRUREZNgqKGiLunTYSJmguM8BEM65g4FrgWlmdpwXGw/cALwBTAV+bGYfe/sqgLGAH3jSzB6KU91FREREKC8PUlo6ml9zDjN5smPpsEROUNxD/nQL0AjsBqYB5Wb2UZRzzwWOAULA62ZW3VtZ/WmZOwF4EOg8p8r1wO/M7AbgAeBmr/CvAdPNbBnwQ2CVc+7AfpQhIiIisk/aJyj+Q955XJ5+M64wLRkmKI6WPzWY2ZVmthL4K3Bl95Occ4cBlwGXmdnlwBLn3NTeCuozmTOz+4Bd3cKnA5u898942wBz2uNm1gLUACf2VYaIiIjIYJSUtPKLZwv45UffZOPGxkQnclHzJzO7qtNmOpEWuu5mAVvMrH1BhU3QaT20KPZ1nrmJnSq4E/A753xevKbTcTu9WK/8/ix8vox9rIqIiIhI6vCeWs4E5kXZ3TnHgn7kUvuazG0DxgCfEukfV29mrc659ni7sd6xvaqvb9zHaoiIiIgMrdzcMX0f1APn3DhgDfA9M/skyiHbgCmdtscCr/V2zX0dzfoo8A3v/fHeNsAj7XGvpa4QeHofyxAREREZNpxzOcDtQIWZvemcm+fF051zn/cO2wB82TnX3tfuG8DjvV03LRzufY1751wRcD5wKnAHsAoYDdwIvA3kA1d0G83q9/493p/RrNu37+q9EiIiIiJJIjd3TFpfx/SQPz1D5Kloe4vcLjM7wzl3NHC3mR3pnXsu8BUio1lr+xrN2mcyNxSUzImIiEiq6E8yN5Q0abCIiIhIClMyJyIiIpLClMyJiIiIpDAlcyIiIiIpTMmciIiISApLitGsIiIiIrJv1DInIiIiksKUzImIiIikMCVzIiIiIilMyZyIiIhIClMyJyIiIpLClMyJiIiIpDBfoisgQ8s5dzBwLTDNzI7zYrcAjcBuYBpQbmYfOedOA84CXgKOAtab2YPeOUcDFwFvAhOBy8ys1Tm3P3Az8D4wFbjBzGqH8mscLgZyrzqdcwTwF+A7ZvaIF9O9irOB3ivn3OnAl4DRwHTgFDNr0b2KvwH+DhwF/AfwFnAQ8IGZXeOdo3sVRz3cpzLgSKAWOJ7I93aTt68CGAv4gSfN7CEvPiLuk1rmRp4TgAeBtE6xBjO70sxWAn8FrvTinwP+3cxuBiqAXznn0p1zacD/AMvM7HogBHzXO6cceMe71i3AXXH/ioavgdwrnHOjgcuBv3WK6V4NjX7fK+fcZOBMM7vRzJYT+UMT0r0aMgP5uSoB/J3u0yXOuUN1r4ZEtPu0H7DUzG4C1gIrAJxzXwOmm9ky4IfAKufcgSPpPimZG2HM7D5gV7fYVZ0204l8OsXMqs3s3U7xBjNrA/KA0Z1ahJ4BTvfenw5s8s7/GzDNOTc2Hl/LcDeQe+W5DrgGCHaK6V4NgQHeq/lAo3Puh865a4CJ+rkaOgO8Vx8DOd77scAHwCfoXsVdD/fpJjNr8janAC977+fw2fe8BagBTmQE3Sc9ZpUOzrkDgZnAvCi7LweWeu8n0vWHbKcX623fzphWdoTrfq+cc+cDz5jZm865zofqXiVYlJ+rLwAFwCXAKOB559z/A0xA9yqhut8rM9vonNvqnPsVke/3f5tZk3NOP1cJ4j1+rQSOAeZ64YlEErh27d/z7YyQ+6RkTgBwzo0D1gDfM7NPuu27DPibma33QtuAMZ0OGevF+tonMdDDvZoOmHPuCuDzwLe9/j4voHuVMD3cq53AZjMLA3uccy8A/wz8Ad2rhIl2r5xzPwBGmdn5zrl04M/Oub8Dhu5VQnitbGXOuZOBx4Cv0vP3fMT8rdJjVsE5lwPcDlR4LTvzOu27CnjXzP7LOXeSc24C8AbQ5H1CgkhH1Ee9948C3/DOPRJ4wcxS8pNOMurpXpnZv5jZDWZ2A/AOcJ+Z3Y/uVcL08nP1f0Qe/7T7ApEO3bpXCdLLvfoc8CGA9yj8Y2B/dK8Swhvk0O5NPvs5eoTPvuc+oBB4mhF0n9LC4XCi6yBDyDlXBJwPnArcAawi0o/AR6QvCMAuMzvD+1R6FZ/1SzgUmGFmb3kjhJYCbwPj+WyE0GgiI4Q+JNKn4fpUHiGUSAO5V53OuYTIffkjcIeZ/Un3Kv4Geq+cc8uJfJg+AKjzOmGjexV/A/wdeDBwG/B3IiOPxxLpgB/SvYqvHu7TTUT6BNcRGXV8j5k94B1fQWQkqx94vNto1mF/n5TMiYiIiKQwPWYVERERSWFK5kRERERSmJI5ERERkRSmZE5EREQkhSmZExEREUlhSuZEREREUphWgBCRmHPOzSGyoHUdkE1kfqcNwLeIzLKeT2Sy3Ke8U8YA1cC/AwcCvyPy+ykfuMbMnnLOHUFknqlTgDVmdplzbiVwMZEJQq8APgIeJ7K25moic05dATQCf+5UxUM7z8/Xre653rnnAHcSWejbAT8zs4C3IsolwGtE5mDMAnKBUjN7x7vG/sDVROZmbPT2bwduMbMaRERiSPPMiUhMOef2I7IKxWQza/RiNwBbgPfMbJNz7gJggZmd5O3/mZld4k2me4SZLfDi04G7zCzP2z6JyEShB3cq7y3gAjN7wjl3FpHlfX7kzdiPc24t8JGZXdHpnGu7La7e/Ws4nMgM86PNrNk592UiEzEfZmY7nHMbvXr8wjv+auBzZvY9b/txIGBm/9Hpmr8kMsv86oF+T0VEeqOWORGJtf2JzJR/CJHWK4AVAO3JXXdmdkkP15pIpHWtT97qF2Ezq+jjuLVmtqg/1+zkZSJf1+HAjij7O+rpnDsROAL4z27H/DuRFjoRkZhSMiciMWVm//Aefz7vnPstkcee93VaaL4vX3HOVQNHE0meLu3HOVcTaQm7oYf9Z3qtbdB1ce3+mknk8fArnWLnOOe+CnwTCAMLvfjXgBoz6/LYw8zeBd7dh7JFRHqlARAiEnNmtoLIeocbgLOAt5xzxf08/TkzKwXmAJuBe/pxzgfAJd6C2dE8ZGYLvMe3G/tZD4DbnHN3EfkaZphZQ6d9v/Yeq5YC/387988aRRTFYfgVxNYmhQHBziMIQmxT21laioV2QlBBJMEihIBNSCErGLVSUBsLKysVwcKAjYoWP4tUCoL4EQSLO+IiJptdVmHwfdq5c+5hiuFw/5wnSV6PEVeSpsZiTtLUVdVcki9JNpKcAG4AF8aJkeQr8Aa4sovht4BV4FlVHRsRd22MNBaSnEtyOsm7beI9B4535/kANoEjVbVneFxVzVTVoTHmlqRdsZiT9Dfcrarf/y+TbDHeBM5X1f5RA5MMaAXd01EFXVUNJshlJwNgucvjJfAeODs0317gAXB0yvNKkrdZJU1fVd2mHfb/TGtNso+2yvWtuyCwAhymtftY7945ya/WJHd+rqBV1UNaa5NrwEXa+bVBksWqWqWt+L0AlpJ8qKqFLs494C2wRGsP8mooxbkk89vkPgOsA2eADWAtydbQ80vAZeAjcD3J465Y26K1VLlKuySxCMwC34EDtDN99yf4nJK0I4s5SZKkHnObVZIkqcdsTSLpv1RVB4FTf3j0KMmnf52PJE3KbVZJkqQec5tVkiSpxyzmJEmSesxiTpIkqccs5iRJknrMYk6SJKnHfgCxn9X9ZqcxkAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "option_selection.set_index('STRIKE_PRC')[['CF_CLOSE', 'IMP_VOLT']].plot(\n",
    "    secondary_y='IMP_VOLT', style=['bo', 'rv'], figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch21/dx_cal_03.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Option Modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "uuid": "b2f6b10c-bf01-46f6-958a-e0e6266adbe8"
   },
   "outputs": [],
   "source": [
    "from valuation_mcs_european import valuation_mcs_european\n",
    "from jump_diffusion import jump_diffusion\n",
    "from market_environment import market_environment\n",
    "from constant_short_rate import constant_short_rate\n",
    "from derivatives_position import derivatives_position\n",
    "from derivatives_portfolio import derivatives_portfolio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "uuid": "c93f5398-8620-48d1-9c6b-ae0c79653751"
   },
   "outputs": [],
   "source": [
    "pricing_date = option_selection['CF_DATE'].max()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "uuid": "c191a3e9-286e-4c84-8044-aaf05f88377b"
   },
   "outputs": [],
   "source": [
    "me_dax = market_environment('DAX30', pricing_date)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "maturity = pd.Timestamp(calls.iloc[0]['EXPIR_DATE'])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "uuid": "52879659-97e7-4c0f-a14f-b29bea60b3c8"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('initial_value', initial_value)  \n",
    "me_dax.add_constant('final_date', maturity)  \n",
    "me_dax.add_constant('currency', 'EUR')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "uuid": "f1862ff5-ef88-4364-beba-502872ac5450"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('frequency', 'B')  \n",
    "me_dax.add_constant('paths', 10000)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "uuid": "f0aedd9b-a2c9-4713-a02d-cc5a8959408e"
   },
   "outputs": [],
   "source": [
    "csr = constant_short_rate('csr', 0.01)  \n",
    "me_dax.add_curve('discount_curve', csr)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "uuid": "11c8a827-c54c-451a-93c3-9f8db6df970c"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('volatility', 0.2)\n",
    "me_dax.add_constant('lambda', 0.8)\n",
    "me_dax.add_constant('mu', -0.2)\n",
    "me_dax.add_constant('delta', 0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "uuid": "fd70a940-895e-43a4-a66c-d2c3bcc7c285"
   },
   "outputs": [],
   "source": [
    "dax_model = jump_diffusion('dax_model', me_dax)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "uuid": "fe6d0c61-4907-4466-98ae-3ca782f83964"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('strike', initial_value)  \n",
    "me_dax.add_constant('maturity', maturity)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "uuid": "8e36b826-9439-49f2-b4fa-e35928b8df41"
   },
   "outputs": [],
   "source": [
    "payoff_func = 'np.maximum(maturity_value - strike, 0)'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "uuid": "d33efcec-e027-4b1a-8fa1-c13696779de3"
   },
   "outputs": [],
   "source": [
    "dax_eur_call = valuation_mcs_european('dax_eur_call',\n",
    "                        dax_model, me_dax, payoff_func)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "uuid": "cedcee4e-1135-4b38-9381-d74b306de63e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "634.090504"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dax_eur_call.present_value()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "uuid": "a4a9ab6f-0810-403f-b172-d08deb80c582"
   },
   "outputs": [],
   "source": [
    "option_models = {}  \n",
    "for option in option_selection.index:\n",
    "    strike = option_selection['STRIKE_PRC'].loc[option]  \n",
    "    me_dax.add_constant('strike', strike)  \n",
    "    option_models[strike] = valuation_mcs_european(\n",
    "                                'eur_call_%d' % strike,\n",
    "                                dax_model,\n",
    "                                me_dax,\n",
    "                                payoff_func)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "uuid": "89ec1029-091b-4ab1-8d60-b7a604c02f69"
   },
   "outputs": [],
   "source": [
    "def calculate_model_values_old(p0):\n",
    "    ''' Returns all relevant option values.\n",
    "    \n",
    "    Parameters\n",
    "    ===========\n",
    "    p0: tuple/list\n",
    "        tuple of kappa, theta, volatility\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    model_values: dict\n",
    "        dictionary with model values\n",
    "    '''\n",
    "    volatility, lamb, mu, delta = p0\n",
    "    dax_model.update(volatility=volatility, lamb=lamb, mu=mu, delta=delta)\n",
    "    model_values = {}\n",
    "    for strike in option_models:\n",
    "        model_values[strike] = option_models[strike].present_value(fixed_seed=True)\n",
    "    return model_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "uuid": "89ec1029-091b-4ab1-8d60-b7a604c02f69"
   },
   "outputs": [],
   "source": [
    "def calculate_model_values(p0):\n",
    "    ''' Returns all relevant option values.\n",
    "    \n",
    "    Parameters\n",
    "    ===========\n",
    "    p0: tuple/list\n",
    "        tuple of kappa, theta, volatility\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    model_values: dict\n",
    "        dictionary with model values\n",
    "    '''\n",
    "    volatility, lamb, mu, delta = p0\n",
    "    dax_model.update(volatility=volatility, lamb=lamb,\n",
    "                     mu=mu, delta=delta)\n",
    "    return {\n",
    "            strike: model.present_value(fixed_seed=True)\n",
    "            for strike, model in option_models.items()\n",
    "        }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "uuid": "d16e0a95-8543-4b08-b056-3d4f83d05e51"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{12050.0: 612.630793,\n",
       " 12100.0: 573.154113,\n",
       " 12150.0: 534.825269,\n",
       " 12200.0: 497.751418,\n",
       " 12250.0: 461.925071,\n",
       " 12300.0: 427.52612,\n",
       " 12350.0: 394.533406,\n",
       " 12400.0: 362.901078,\n",
       " 12450.0: 332.642386,\n",
       " 12500.0: 303.832022,\n",
       " 12550.0: 276.622928,\n",
       " 12600.0: 251.081814,\n",
       " 12650.0: 227.209816,\n",
       " 12700.0: 205.021897,\n",
       " 12750.0: 184.444501,\n",
       " 12800.0: 165.325118,\n",
       " 12850.0: 147.589096,\n",
       " 12900.0: 131.133161,\n",
       " 12950.0: 115.947981,\n",
       " 13000.0: 102.152171}"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "calculate_model_values((0.1, 0.1, -0.4, 0.0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calibration Procedure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "uuid": "6d94c077-ebf9-46e3-8185-d4c80d12116d"
   },
   "outputs": [],
   "source": [
    "i = 0\n",
    "def mean_squared_error(p0):\n",
    "    ''' Returns the mean-squared error given\n",
    "    the model and market values.\n",
    "    \n",
    "    Parameters\n",
    "    ===========\n",
    "    p0: tuple/list\n",
    "        tuple of kappa, theta, volatility\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    MSE: float\n",
    "        mean-squared error\n",
    "    '''\n",
    "    global i\n",
    "    model_values = np.array(list(calculate_model_values(p0).values()))  \n",
    "    market_values = option_selection['CF_CLOSE'].values  \n",
    "    option_diffs = model_values - market_values  \n",
    "    MSE = np.sum(option_diffs ** 2) / len(option_diffs)  \n",
    "    if i % 75 == 0:\n",
    "        if i == 0:\n",
    "            print('%4s  %6s  %6s  %6s  %6s --> %6s' % \n",
    "                 ('i', 'vola', 'lambda', 'mu', 'delta', 'MSE'))\n",
    "        print('%4d  %6.3f  %6.3f  %6.3f  %6.3f --> %6.3f' % \n",
    "                (i, p0[0], p0[1], p0[2], p0[3], MSE))\n",
    "    i += 1\n",
    "    return MSE        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "uuid": "489f4f60-5237-4eff-be12-19abc6583ecb"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.100   0.100  -0.400   0.000 --> 686.617\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "686.6173429460224"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error((0.1, 0.1, -0.4, 0.0))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "uuid": "d4d06a9e-929b-4a02-95c1-433529015988"
   },
   "outputs": [],
   "source": [
    "import scipy.optimize as spo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "uuid": "15b93990-3228-4330-b5df-10915827ebcc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.100   0.100  -0.400   0.000 --> 686.617\n",
      "  75   0.100   0.300  -0.400   0.100 --> 5206.726\n",
      " 150   0.100   0.500  -0.300   0.060 --> 12291.888\n",
      " 225   0.100   0.700  -0.200   0.020 --> 7044.512\n",
      " 300   0.125   0.200  -0.200   0.120 --> 928.079\n",
      " 375   0.125   0.400  -0.100   0.080 --> 778.999\n",
      " 450   0.125   0.600   0.000   0.040 --> 454.891\n",
      " 525   0.150   0.200  -0.400   0.000 --> 16571.403\n",
      " 600   0.150   0.400  -0.400   0.100 --> 47027.816\n",
      " 675   0.150   0.600  -0.300   0.060 --> 56710.781\n",
      " 750   0.175   0.100  -0.200   0.020 --> 14827.909\n",
      " 825   0.175   0.300  -0.200   0.120 --> 25632.328\n",
      " 900   0.175   0.500  -0.100   0.080 --> 20727.821\n",
      " 975   0.175   0.700   0.000   0.040 --> 13607.617\n",
      "1050   0.200   0.300  -0.400   0.000 --> 78412.863\n",
      "1125   0.200   0.500  -0.400   0.100 --> 131030.990\n",
      "1200   0.200   0.700  -0.300   0.060 --> 127299.100\n",
      "CPU times: user 1min 27s, sys: 2.76 s, total: 1min 30s\n",
      "Wall time: 1min 30s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "i = 0\n",
    "opt_global = spo.brute(mean_squared_error,\n",
    "                  ((0.10, 0.201, 0.025),  # range for volatility\n",
    "                   (0.10, 0.80, 0.10),  # range for jump intensity\n",
    "                   (-0.40, 0.01, 0.10),  # range for average jump size\n",
    "                   (0.00, 0.121, 0.02)),  # range for jump variability\n",
    "                 finish=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "uuid": "359c3f5f-4f47-4e53-a916-85d3c745ed1b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "13.64711871961401"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error(opt_global)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "uuid": "9fd46baf-28af-4276-a1c1-b3e521550cdd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.100   0.200  -0.300   0.000 --> 13.647\n",
      "  75   0.098   0.204  -0.313  -0.000 -->  7.860\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 7.858895\n",
      "         Iterations: 63\n",
      "         Function evaluations: 129\n",
      "CPU times: user 9.4 s, sys: 293 ms, total: 9.69 s\n",
      "Wall time: 9.71 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "i = 0\n",
    "opt_local = spo.fmin(mean_squared_error, opt_global,\n",
    "                     xtol=0.00001, ftol=0.00001,\n",
    "                     maxiter=200, maxfun=550)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "uuid": "d7c22ea7-b3dd-4408-9ef2-3a986354ba26"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.098   0.204  -0.313  -0.000 -->  7.859\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "7.858895331062939"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = 0\n",
    "mean_squared_error(opt_local)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "uuid": "70b888ee-8d31-46b2-86be-ad95dedd347a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{12050.0: 647.605263,\n",
       " 12100.0: 607.529685,\n",
       " 12150.0: 568.544293,\n",
       " 12200.0: 530.727453,\n",
       " 12250.0: 494.082633,\n",
       " 12300.0: 458.675596,\n",
       " 12350.0: 424.61369,\n",
       " 12400.0: 391.960168,\n",
       " 12450.0: 360.62764,\n",
       " 12500.0: 330.60392,\n",
       " 12550.0: 301.991188,\n",
       " 12600.0: 274.858086,\n",
       " 12650.0: 249.384354,\n",
       " 12700.0: 225.581816,\n",
       " 12750.0: 203.457141,\n",
       " 12800.0: 182.986208,\n",
       " 12850.0: 163.988631,\n",
       " 12900.0: 146.364384,\n",
       " 12950.0: 130.012102,\n",
       " 13000.0: 114.93825}"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "calculate_model_values(opt_local)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "uuid": "d6cf96da-5139-435e-8ed9-6be593fa7a15"
   },
   "outputs": [],
   "source": [
    "option_selection['MODEL'] = np.array(list(calculate_model_values(opt_local).values()))\n",
    "option_selection['ERRORS_EUR'] = (option_selection['MODEL'] -\n",
    "                                  option_selection['CF_CLOSE'])\n",
    "option_selection['ERRORS_%'] = (option_selection['ERRORS_EUR'] /\n",
    "                                option_selection['CF_CLOSE']) * 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "uuid": "716cd81a-0e06-405c-ade7-7fa407ce19cb"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MODEL</th>\n",
       "      <th>CF_CLOSE</th>\n",
       "      <th>ERRORS_EUR</th>\n",
       "      <th>ERRORS_%</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>647.605263</td>\n",
       "      <td>642.6</td>\n",
       "      <td>5.005263</td>\n",
       "      <td>0.778908</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>607.529685</td>\n",
       "      <td>604.4</td>\n",
       "      <td>3.129685</td>\n",
       "      <td>0.517817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>568.544293</td>\n",
       "      <td>567.1</td>\n",
       "      <td>1.444293</td>\n",
       "      <td>0.254680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>530.727453</td>\n",
       "      <td>530.4</td>\n",
       "      <td>0.327453</td>\n",
       "      <td>0.061737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>494.082633</td>\n",
       "      <td>494.8</td>\n",
       "      <td>-0.717367</td>\n",
       "      <td>-0.144981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>458.675596</td>\n",
       "      <td>460.3</td>\n",
       "      <td>-1.624404</td>\n",
       "      <td>-0.352901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>424.613690</td>\n",
       "      <td>426.8</td>\n",
       "      <td>-2.186310</td>\n",
       "      <td>-0.512256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>391.960168</td>\n",
       "      <td>394.4</td>\n",
       "      <td>-2.439832</td>\n",
       "      <td>-0.618619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>360.627640</td>\n",
       "      <td>363.3</td>\n",
       "      <td>-2.672360</td>\n",
       "      <td>-0.735579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>330.603920</td>\n",
       "      <td>333.3</td>\n",
       "      <td>-2.696080</td>\n",
       "      <td>-0.808905</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>301.991188</td>\n",
       "      <td>304.8</td>\n",
       "      <td>-2.808812</td>\n",
       "      <td>-0.921526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>274.858086</td>\n",
       "      <td>277.5</td>\n",
       "      <td>-2.641914</td>\n",
       "      <td>-0.952041</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>249.384354</td>\n",
       "      <td>251.7</td>\n",
       "      <td>-2.315646</td>\n",
       "      <td>-0.920002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>225.581816</td>\n",
       "      <td>227.3</td>\n",
       "      <td>-1.718184</td>\n",
       "      <td>-0.755910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>203.457141</td>\n",
       "      <td>204.1</td>\n",
       "      <td>-0.642859</td>\n",
       "      <td>-0.314973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>182.986208</td>\n",
       "      <td>182.4</td>\n",
       "      <td>0.586208</td>\n",
       "      <td>0.321386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>163.988631</td>\n",
       "      <td>162.0</td>\n",
       "      <td>1.988631</td>\n",
       "      <td>1.227550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>146.364384</td>\n",
       "      <td>142.9</td>\n",
       "      <td>3.464384</td>\n",
       "      <td>2.424341</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>130.012102</td>\n",
       "      <td>125.4</td>\n",
       "      <td>4.612102</td>\n",
       "      <td>3.677912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>114.938250</td>\n",
       "      <td>109.4</td>\n",
       "      <td>5.538250</td>\n",
       "      <td>5.062386</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         MODEL  CF_CLOSE  ERRORS_EUR  ERRORS_%\n",
       "43  647.605263     642.6    5.005263  0.778908\n",
       "45  607.529685     604.4    3.129685  0.517817\n",
       "47  568.544293     567.1    1.444293  0.254680\n",
       "49  530.727453     530.4    0.327453  0.061737\n",
       "51  494.082633     494.8   -0.717367 -0.144981\n",
       "53  458.675596     460.3   -1.624404 -0.352901\n",
       "55  424.613690     426.8   -2.186310 -0.512256\n",
       "57  391.960168     394.4   -2.439832 -0.618619\n",
       "59  360.627640     363.3   -2.672360 -0.735579\n",
       "61  330.603920     333.3   -2.696080 -0.808905\n",
       "63  301.991188     304.8   -2.808812 -0.921526\n",
       "65  274.858086     277.5   -2.641914 -0.952041\n",
       "67  249.384354     251.7   -2.315646 -0.920002\n",
       "69  225.581816     227.3   -1.718184 -0.755910\n",
       "71  203.457141     204.1   -0.642859 -0.314973\n",
       "73  182.986208     182.4    0.586208  0.321386\n",
       "75  163.988631     162.0    1.988631  1.227550\n",
       "77  146.364384     142.9    3.464384  2.424341\n",
       "79  130.012102     125.4    4.612102  3.677912\n",
       "81  114.938250     109.4    5.538250  5.062386"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "option_selection[['MODEL', 'CF_CLOSE', 'ERRORS_EUR', 'ERRORS_%']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "uuid": "91c24e54-e18a-4cfe-88b2-82ef82947b9c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.182"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(option_selection['ERRORS_EUR'].mean(), 3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "uuid": "91c24e54-e18a-4cfe-88b2-82ef82947b9c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.364"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(option_selection['ERRORS_%'].mean(), 3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "uuid": "9d2912c2-9ab3-4423-95d5-984df6f9f31e"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAJMCAYAAABU7rrnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXyU1dn/8c8kE7Ivk2SykYQlJAfCJqKyWfe21qVKpYu21ta2T5enVer2U9u6tGpdqo/a1j62j7bVVq3FIqJS11YKsqOsyQmEsISQhZCQQNgC8/tjJjFABiYhk5kk3/frlVdmzn3PfV/hMnJx7rM4PB4PIiIiIhI6EaEOQERERGSgU0EmIiIiEmIqyERERERCTAWZiIiISIipIBMREREJMRVkIiIiIiHmDHUAp6Kurtnvmh0uVxwNDS29GY50kXLUNyhP4U85Cn/KUfjrjRy53YkOf8f6bQ+Z0xkZ6hDkJJSjvkF5Cn/KUfhTjsJfqHPUbwsyERERkb5CBZmIiIhIiKkgOwXRs2fhOncK6dkuXOdOIXr2rFCHJCIiIn1Qnx7UH0rRs2eR9N3r2987S9aR9N3raQIOTJ8RusBERESkz1EPWTfFPf5o5+1PPNbLkYiIiEhfp4KsmyLLSrvULiIiIuKPCrJuOlw0skvtIiIiIv6oIOumlpk3d9r+1vlXs6W6uZejERER6Ts2bdrIDTd8jzffnBvwZ1auXM6GDTaIUfXufY6lQf3ddGD6DJrwjhmLLCtl1+BhvDTxC/wzejT8aRlDshI5Z3wOk4sziY3WH7OIiEib4cNHMH78hC595qOPVpCdnUNhoQlSVL17n2OpUjgFB6bPOGpG5VVHjlBUvov5q6pYXV7P829Z/vb+Bs4cmcG54wdTMDgJh8PvrgkiIiJh6Y03XuPpp3/LV77yVcrLN9DYuJtLLrmcpUsXUVm5jYcf/h/i4xOYPXsWFRXlpKamUV29g1tuuYOWlhbuuecngIcRI4pYsmQR3/rWd9uvXV+/kx//+L+ZPHkaV1/9NbZu3cIbb7zG0KHD2Lp1C9/73o9oatrNRx+tYOPGMnbsqOJrX/sG0dHR7dewtpRnnnmakSNHcfDgQd599y1mzryFnTvr+Mtf/sysWXNZunQxDz98P7/+9dNkZ+ewevXHzJv3Brm5uWzZspnbb7+Vysq64+5TWrr+uHhSUlJ47LGHSElxceDAAdxuNzNmfOWU/oxVkPWgyIgITitM57TCdBqaD7BwzQ7mr6pi4ZpqFq6pJic9nnPGZTNlTBaJcYNCHa6IiPRBL7+/kWWltT16zTNHZvClC0b4PX7ppZ9n3rzXKSoayTXXfJ077riZffv2cscdd/H4479i2bIlnHfehbjdGVxxxReIiIjg8ccfYenSxUydejZf+9p1/O53T/KDH9zAl798DUeOHGHDBovH42Hu3Fe59dY7GTt2PB6Ph29+86v84Q9/xu3O4M035/Lcc89www03M2HCRLKzc7jkksuPi++RRx7gxz++jdGjx7Bs2RLWrl3N2WefC8Bf/vJnAM46azJZWdkAeDwe7r77Tp599q+4XC7ee+9tHn74YW6//Z6j7tN23rHxfOMb32HBgvk8/fQfcbszWLNm1SnnQAVZkLgSo7ls6lAumTKE0i0NzF9VxcqyOl56fyOzPijn9CI3nxqfw6ghLiLUayYiIn3A4MG5ACQkJJKT432dmJhIS4t3U+6YmBieeupJkpNTqKiooKjDRLchQ4YBkJaW3t72xhuvsWdPM2eeORmAxsZGmpqa+Oc/3wSguXk3EREn32OyoqKcvLw8AHJyBp/0/MbGRvbu3YvL5fL9XHk8//zxqyT4iycpKYkbb7yFBx+8jwMH9nPddd866T1PRgVZkEU4HBQPTaV4aCrNLQdZtLaaD1ZVsbSklqUltbhTYvjUuBymjc3GlRh98guKiMiA9qULRpywNyuUfvrT/8ef/vQiWVlZtLTsPepYZ0N2Lr3084waNZq77rqdp556hpSUFFJSUrjiii+QlJTE7t2NrF27BoDIyEg8Hg91dbU4nVHtxRTA0KHD2bp1K2PGjKWqavtR9/B4PO2va2trAEhJSSEhIYGGhl24XKlUVm5l5MiRnd6ns3iam5tJSXHx6KNPsmlTOffe+xP+/OeXTunPLvKee+45pQuEUkvLwXv8HYuPj6al5WAvRnNy0VGRFAxO5oLTBzNmWBoeD2za0cTail28u7ySzdXNREdF4nbFHNVrFj17Fknf+xYJd95K9Nw5eFJSODyqOIQ/Sc8IxxzJ8ZSn8Kcchb++nqNlyxbz9tvz8Hg8xMcnMHfubBoaGhgyZCizZ/+dmppqJkyYyOHDh3nzzbnU1FTz0UcrqK31tv/tby+wcWMZyckpvuJpC7Nn/53a2momT57KkiUf8u9/v0d+/lDOO+8CXnzxL2zcWMYHH7zPlClnk5LiwuPxMG/e66xcuYIzzjiT+Pj49viMGckzz/yeysqtNDTsYvv2yvZHm01Nu5k//1/U1OygvLzc1yM3iVGjRvPii89TUVHOunVrueOO23E4oo67z5lnTjounpiYaP7wh6fYvr2SNWtWMW3aOUf1BvoTHx99r79jjo6VY19TV9fsN3i3O5G6uvBffqJlfytLS2r4YFVV+3IZKQmDOHtcNmePyyHvX28ctUVTm6ann+3zWzT1lRwNdMpT+FOOwp9y1Ht27Kji/vvv4Te/+X2XPtcbOXK7E/2OUQrqI0tjjAGuBvYB5wL3ABuBB4FNQCFwp7W2xnf+rUAS4ALetta+Fsz4wkFcjJPzJgzmvAmD2VLdzPzVVSxeV8PrH27h9Q+38PuX7iOps8898VifL8hERER6WluP3YcfLmDq1LNDHU7AgtZDZoyJBF4DLrfWHjHGZAOtwC+A9621LxtjLge+ZK291hgzCbjbWnuJMSYKWA+caa1t9HeP/tBD1pkDhw6zvLSW+auqeOTmC4n0HDnuHI/Tyc6qXSGIruf05RwNJMpT+FOOwp9yFP5C3UMWzJX6zwQcwI+MMXcAlwM7gUuBRb5zFvreA1zW1m6tPQSUAOcEMb6wFR0VybSx2dzxtYkc9LMw3e68Alr2H+rlyERERCQYgvnIcggwBbjaWrvbGPMX4CCQAbSVoE2Ayxjj9LWXdPh8k6/NL5crDqfT/3RYtzux+9GHi3vvgquvPq7596MuY8lvFjJ1XA4XnZXP2IJ0IiL63vIZ/SJHA4DyFP6Uo/CnHIW/UOYomAVZE1Bqrd3te78AOA+oBRKBRrzjxRqsta3GmLb2Nkm+c/1qaGjxe6zfdA9feCnRTz/bvkXT4aKR1P3XDWQMm4xr9Q7+vbKSf6+sJD05hrPHZTNtTDZpyTGhjjog/SZH/ZzyFP6Uo/CnHIW/Xnpk6fdYMAuyJUCaMSbSWnsYb49ZGbAfb8/ZNmAa8Ibv/NeBuwF8PWbFwPwgxtdnHLtFkxPvc95LJg9hQ+Vu/rO6imWltbz6nwrm/KeC4mGpfGpcNhMK04k6QQ+iiIiIhIegLnthjJkOXADUAfnAj4BY4CFgC1AA3H7MLEuX72veyWZZ9tdB/d2x70Ary0prWbB6Bxu3ezsl42OcTC7O4uxx2QzJCr+u8oGWo75KeQp/ylH4U44+8dRTT7B+/boTLkvxj3/8nRdeeI5Zs+YG/V5tQj2oP6jLXlhrZwOzj2neB3zHz/mPBDOe/iw22sk543M4Z3wOO+r3smD1Dhaurea9lZW8t7KS/IwEzh6XzeTRWSTERoU6XBERCaLo2bOIe/zR9qEuLTNvDpulkqZP/yLr16874Tlf+MIXeeGF53rlXuFCWyf1Q9lp8Xzx/BFMP2c4azft4j+rq1hdXs8L727g5X9t5PQiN2ePy6Z4SGqfnAggIiL+Rc+eddSC4s6SdSR993qaoNtF2RtvvMbTT/+Wr3zlq5SXb6CxcTeXXHI5S5cuorJyGw8//D/ExyeweXMFL730F/Ly8tmyZTPXXPN1hg4dhrWlPPPM0xQXjyYy8pPSo7W1lSeffBSXK5U9e/ZQWFjExRdf6jeOX//6Mf797/f52c9+Tm5uHnfddQef+czFjBhh+PvfX6CoaCQbNpTxve/9iKysrKM+++qrs/jLX/7MrFlzWbp0MQ8/fD+//vXTZGfnsGrVR7z33jyysnLZunUL3/vej0hJSeGxxx4iJcXFgQMHcLvdzJjxlW79+QUimMteSIg5IyM4rTCdH101jl/99zS+dP4I3CmxLC2p5bG/reK2//2Q2fM3Udu4D/D+ErvOnUJ6tgvXuVOInj0rxD+BiIh0Vdzjj3be/sRj3b7mpZd+nvz8IRQVjeRnP/sFgwZFsW/fXu644y4KCw3Lli0B4Je//DlXXnkVX/3qdVxxxVU8+OAvAHjkkQe47rpv8Y1vfJuRI0e1X/f11+dw6FAr3/zmd/jhD2fy3HPP0tDgf43NH/zgRqKiosjNzSctLZ3hw0dw5ZUziI2N5bvf/SFf/ep1nH/+hbzyyt+O++yVV35SjJ511mSysrIB716Xd999JzNnzuSaa77OuHGn8dxzz9DU1MSCBfO5/PIr+f73f4Qxo467Zk9SD9kAkRw/iIsn5fPZs/LYVNXEf1bvYGlJDXM/3MzcDzfz5Z0r+Npzv2g/vyf+RSUiIr0vsqy0S+1dMXhwLgAJCYnk5HhfJyYm0tLiXfWgvHwDOTmDAcjNzWXjxjIAKirKycvLA2g/7j1/I/X1O3n++T8BMHx4AfX19bhcqZ3/DJGRXHbZFcyZ8wpjxozjrLMmAxAdHc0rr7xMSkoKVVVVtLYGvk5nY2MjTU1NzJkzhz17DtDcvJuIiEiSkpK48cZbePDB+zhwYD/XXfetgK/ZHSrIBhiHw0HB4GQKBidz9YWFLLfeiQDTnuv8Wb22aBIR6VsOF43EWXL8uKnDAWx+fapGjChi+/ZKkpKS2bZtG4WFRQC+DcW3MmbMWKqqtnc4v5BBg6K49tpvAPDBB/8iOzv7hPe4/PIr+fa3r2Pnzp3ccsvtAPz2t09wzjnn8bnPXcbSpYt5551/dvrZjhMZa2trAEhJSSElJYUvf/nLHDwYwe7djaxdu4bm5mZSUlw8+uiTbNpUzr33/oQ///mlbv/ZnEzkPffcE7SLB1tLy8F7/B2Lj4+mpeVgL0bT9zgjI8jPTOTscdnk3PcTHJ3NuN21i6rvziQ2uudrd+Wob1Cewp9yFP56M0eelBSiX59zXPue+x7k8Kjibl1z2bLFvP32PDweD/HxCcydO5uGhgaGDBnavnfkhAkTOfPMyfz97y9SUbGJJUsW8YMf3EhKigtjRvLMM79n69bNVFZuY+3a1eTm5nHBBRexbNlS1q5dzbJlS2hubuKssybzj3/8nUWLFpKZmUVBwYijYomJiWHjxjLy8/MZP34CAE5nJHPm/IPq6h2sXbuajRvLMGYU8+bNZe3aNeTl5ZOXl09T027mz/8XNTU7KC8vZ8+eZs48cxLFxWN44YXnKSkp4YMP3mfKlLOJiYnmD394iu3bK1mzZhXTpp1D0SkWtfHx0ff6OxbUZS+CTcte9BzXuVM6/RdVRfpQbrzuccYOT2Pa2GxOG5FOlLNnhh4qR32D8hT+lKPw19s5ip4966gFxVtuvElPO06iXy97IX1Hy8ybj5qV06b62z9kaFoiq8vrWV1eT3yMk0nFmd61zTITcTg0S1NEJNwcu6C4hD8VZAJ4f3mb4Lh/UY2YPoOfAdvr9rBwTTUfrqvm/ZXbeX/ldga74zl7bDZTRmeRFD8o1D+CiIhIn6VHltIlh48cYc2mXSxcs4OPN+zk8BEPkREOxg5P4+xx2YwrSMMZGdgjTeWob1Cewp9yFP6Uo/CnR5bSp0RGRHDaiHROG5FOc8tBlqyvYcGaHXy8cScfb9xJQmwUU0ZnMW1sFvmZ4bddk4iISDhSQSbdlhg3iIvOyOOiM/LYWtPMwjXVLFpXzTvLt/HO8m3kZyYwbWw2k4szSYzTI00RERF/9MhSelTr4SOsLq9nweodrC6v54jH+0jztBHpTBuXzdjhqcTN+Qdxjz+Ks6yU1jDbY02Op9+l8KcchT/lKPzpkaX0K87ICE4vcnN6kZvdew+yeF01C9bsYEVZHSvK6vhMxSJ+NPuhT87XjgAiIiIqyCR4kuMH8dmz8vnMmXlsqWlmweodfP754/cXA+0IICIiA5sKMgk6h8PB0KwkhmYlkb5rW+fnlJawvLSW8T248KyIiEhfoYJMepW/Pda2pubx1KtriY9xcuaoTKaOzqJgcJIWnhURkQFBXRHSq1pm3tz5gdtu4+Kz8nE6I/j3R9t54C8ruOPpxby2oILaxn29G6SIiEgvUw+Z9KqOOwK0z7K88SYSps/gS8CM8wpYv2UXH66tZqWt49UFFby6oILC3GSmjMnirJEZxMVEhfrHEBER6VFa9kJC5mQ52neglZVldXy4tprSLQ148M7iPK0wnamjsxgzPDXgXQGk+/S7FP6Uo/CnHIW/sF/2whgzHoi31n5ojPkycBbwhLV2awCfXQzs9709bK290BiTCjwIbAIKgTuttTW+828FkgAX8La19rWT3UP6r9hoJ9PGZjNtbDa7mvazaF01H66tZnlpLctLa0mMi+KsUZlMHZPF0CxtdC4iIn1XII8s7wIeM8YUA/+Dt5j6FfClAD77T2vtPce0PQC8a6192Rhzue9a1xpjJgHnW2svMcZEAeuNMfOttY2B/jDSf6UmxXDplKFcMnkIm6ubWbS2msXra3hvRSXvragkOy2OqWOymDI6i9SkmFCHKyIi0iWBPO8psdYuBL4MPGmtfRLYEuD1xxpj/p8x5h5jzKW+tkuBRb7XC33vAS5ra7fWHgJKgHMCvI8MEA6Hg2HZSVzz6SIe++E0bpgxjjNGZlDXuJ9XPtjErU99yCMvfsTCNTvYd6CV6NmzcJ07hfRsF65zpxA9e1aofwQREZHjBNJDNtQYcwZwHZ8USGkBXv8ha+1SY0wkMN8Y0wxkAG0PaZsAlzHG6Wsv6fDZJl+bXy5XHE5npN/jbrc2tw53p5qj7KxkPj1lGHv2HWLhqu28v3wb6yt2UbKlgU2P/x83zX2k/dy2XQFIioWvfOVUQx9Q9LsU/pSj8Kcchb9Q5iiQgmwW8AzwJ2vtVmPM/wAtgVzcWrvU9/2wMeY/wPlALZAINOIdL9ZgrW01xrS1t0nynetXQ4P/MDSAMvz1dI5OL0jj9II0ahv3sXhtNZ/56487Pe/QL+6n8cJLOz0mx9PvUvhTjsKfchT+emlQv99jJy3IrLWvAq92eN/533LHMMaMBKZZa5/xNRUC/wDeAKYA24BpvvcArwN3+z7rBIqB+YHcS6SjjJRYPn/2MNJ3dj7vxFFawpwFFUwuziQzNa6XoxMRETleILMsM4BHgBjgeuAx4HZrbcNJPtoEXGaMycHb27UNeBGYBzxkjCkCCoBbAKy1S4wx/zLGPIB3luVNGtAvp8LfrgCVaXnMWVDBnAUVDMtOZHJxFmeNyiA5IToEUYqIiAT2yPIRvD1V51lr9xpj/hd4GPjOiT5kra0CpndyaJe/z1prH+msXaQ7Wmbe7B0zdoyEu3/Ct4tHsXhdDes3N1CxYwMvvb+B4iEuJo/O4vQiN7HRWjNZRER6TyB/62y31j7jG9iPtfYjY4x6riTsddwVILKslMO+XQE802cwFZg6Jpvdew+yrKSGxetrWLe5gXWbG3juLcv4EelMKc5kbEGaFp8VEZGgC6Qga5tR6QEwxsTjfdQoEvYOTJ/Bgekz/B5Pjh/ERWfkcdEZedQ0tLBkfQ2L19W0Lz4bH+PkjJEZTC7OpDAvhQgtPisiIkEQSEH2rjFmLRBtjHkDOAP4UXDDEul9ma44Pj9tGJdPHcqWmmYWr6thSUkNH3xcxQcfV5GaFM2kUZlMHp1FXkZCqMMVEZF+JKC9LI0xBrgIcADvWGttsAMLhPay7Nv6Qo6OHPFQurWBxetqWFFWy74DhwEY7I5ncnEmk4ozSU+OJXr2LOIef/STR6Mzbz5hz1xf0hfyNNApR+FPOQp/od7LslubixtjpltrZ59SVD1ABVnf1tdydPDQYVaX17N4fQ2ry3fSetj7n98X61bw9ed/cdz5TU8/2y+Ksr6Wp4FIOQp/ylH4C3VBFsiyF8920jwJCHlBJtKbBkVFcsbIDM4YmcHe/YdYYetYvK6ac557rtPz4554rF8UZCIiEnyBTB/LAz7wfX2Id5X+N4MZlEi4i4+J4pzxOdx2zekMaajs9BxHaQnLS2s5eOhwL0cnIiJ9TSCD+q+31m7r2GCMeTBI8Yj0Of4WoN2amsdTr64lelAkpxemM6k4k+KhqVpGQ0REjhNIQeYwxuT7XkcA2cDU4IUk0rf4W4DWc9ttXDJ0CEtLali0zvsVH+Nkoslg0qgMTL6LiAgtoyEiIoEVZGuAerwzLD3ADrwr9YsI/hegTZw+gxnAVecOZ9OOJpaur2VpaQ3zV1Uxf1UVyfGDOGNkBpNGZTJ8cJLWOBMRGcBOOsvSGDPTWvt4L8XTJZpl2bcNxBwdOeKhbFsjS0tqWG7r2LPvEABpSdGcNSqTs0Zlkp+ZgCOMirOBmKe+RjkKf8pR+Av1LMvuLnvxLWvtM6cUVQ9QQda3DfQctR4+QsmWBpaur2Hlhrr2Nc4yU+OYNCqDs0ZlkpMeH+Iolae+QDkKf8pR+At1Qeb3kaUx5n0/hxzACCDkBZlIX+aMjGDs8DTGDk/j662HWbNpF0tLavh4w05eW7iZ1xZuJtedwKTiDM4clUlGSmyoQxYRkSA50RiyZuCxTtodwA3BCUdkYIpyRnJ6kZvTi9zsP9jKqo31LC2pYc2mel75YBOvfLCJ4TlJfLF2BWfO+SODNtp+tyOAiMhAdqKC7IfHLnfRxhizMUjxiAx4MYOcTPJty9Sy/xAryupYWlJL+j/ncPYbj7af5yxZR9J3r6cJVJSJiPRxfguyjsWYMSYLKAAifU03AlcFNzQRiYuJ4lPjcvjUuBySfvO9Ts/Zc+/9zM+fzBnGTXJCdC9HKCIiPSGQrZO+C/wAcAHlQG6wgxKR4w3aaDttz6jezF/fKeOFd8oozEvhzJEZTDRuUlSciYj0GYEsGT7RWjseeMVaez5ggNeCG5aIHOtw0Ui/7ddcVEhhbjIbtjXy13fKuPk3C3nwryt5b0UljXsO9HKkIiLSVYEsDFvv+x4LYK09YoxJDV5IItIZfzsCHPjxzVx0Rh4XnZFHQ/MBVthalpfWsmFbI2XbGr09Z7nJnDkqUz1nIiJhKpCCbIwx5lyg2hjzKrALKAz0BsaYWGAJ8La19hZfMfcgsMl3nTuttTW+c28FkvA+Hn3bWqueOBEffzsCdBzQ70qMPqo4W1lWx7KSGjZU7qascnd7cXbGyAwmmgxciSrORETCQSAF2beAI8Ai4CYgDbi6C/e4D/iow/sHgHettS8bYy4HfgVca4yZBJxvrb3EGBMFrDfGzLfWNnbhXiL92oHpMwKeUelKjObCiblcODH3k+KsreescjcvvrtBxZmISJgIpCD7vrX2Xt/rB7tycWPMtcBCYByQ4Gu+FLjf93oh8Gff68vwFn1Yaw8ZY0qAc9B4NZFT1rE4a9xzgBX2+OJsRG6yb0KAijMRkd4WSEE23RhThLd4+qu1dncgFzbGFAOjrLV3GmPGdTiUgXfRWYAmwGWMcfraSzqc1+Rr88vlisPpjPR73O1ODCRUCSHlqPe53YkUDkvnKxePYlfTfhatruI/q6pYX1HPhsrdvPjeBkYNTeWLO1dy2t//D2wJ7uJiuPNO+MpXQh2++KHfpfCnHIW/UOYokILsOmvtKmPMVOABY0wE8JK19oOTfG46sN8YcztwNjDIGDMTqAUSgUa848UarLWtxpi29jZJvnP9amho8XtM+4aFP+UoPJxl3Jxl3O09Z8tLa0mfN4cz3vxkEVrWrIGrr6apaZ8WoQ1D+l0Kf8pR+OulvSz9HgukIGvwfS8BLPB94Fyg+EQfsta2PZbEGBMDJFhrHzfGjASmANuAacAbvtNeB+72ne/0XX9+APGJSA9ISfjksWbS//6g03Oa7r6Pt9wTOb3IzWB3PA6H331yRUSkCwIpyJ41xuwELgLmAN+21i4M9AbGmKvwjgUbZIy5GrgTeMj3GLQAuAXAWrvEGPMvY8wDeGdZ3qQB/SKh4W8R2qzaLby6oIJXF1SQ4YplYpGb042bYdlJRKg4ExHpNofH4znhCcaYDXgH8//NWrunV6IKUF1ds9/g1T0c/pSj8OU6dwrOknXHtR8cNZq3f/cqK8rqWFNez4FDh73nJ0YzoTCdiUVuivJTiIwIZM1p6Sn6XQp/ylH466VHln7/5RpID9k3utIjJiJ9n79FaPfPvLl94/ODhw6zbvMuVpbV8fGGnby/cjvvr9xOQmwUp41I5/QiN6OHuYg6wcQbERHxOmlBpmJMZODpuAits6yU1k4WoR0UFcmEQjcTCt20Hj5C2bZGVpTVsbKsjgVrdrBgzQ6iB0UybngaE42bscPTiI0O5N+AIiIDz0kfWYYzPbLs25SjvqGreTri8VBR1eQtzmwdtY37AHBGOigemsrEIjenFaaTGDcoWCEPOPpdCn/KUfjrC48sRUQCFuFwUDA4mYLByXzxvAIq6/aysqyOFbaO1eX1rC6vx/FPMHkpnF7k5tyyBWQ8/eQn20HNvFlLa4jIgNOtgswYc3eH1ftFRDrlcDjIy0ggLyOBK84eRk1DCyt9PWelWxtxvz2XnA7rnTlL1pH03etpAhVlIjKgnLQgM8b8F3AP3lXzHb4vD6CCTES6JNMVx+cmDeFzk4bQ0HyAjAtv6/S8g/f/krIzLmLE4GQiIrSchoj0f4H0kM3EuxBsubX2CIAx5o6gRiUi/Z4rMZrkbeWdHkup3MSDf11JQmwU40ekMaHQzeihqUQP0oxNEemfAinIVllrNxzTNi8YwYjIwHK4aGSn653tG17Iuafl8PGGnSxcU83CNdVEOSMYPTSV0wrTGT8ineR4TQoQkf4jkIJsrzHmPWAxcMDXdgkwOWhRiciA4G+9M8+tt3HdxSO59rMeKnY08fGGnXy0YScfb38JpisAACAASURBVPR+OYCCwclMKEzntMJ0stPiez94EZEeFEhBdj7wnO+145jvIiLd1nG9s/ZZlh3WO4twOCjISaYgJ5mrzi2gpqGFj8p28vGGOjZs383G7bv5+7/LyUyNY0JhOhMK0ynI0bgzEel7AinIbrHWzu7YYIx5K0jxiMgAc2D6jIBnVGa64rh4Uj4XT8qnueUgq8vr+WjDTtZW1PPPJVv555KtJMVFMW6EtzgbPTSVQVEadyYi4S+QlfpnG2NGA5/FO7vyLWvt4qBHJiJyAolxg5g2NptpY7M5eOgw67c08PGGOj7eWM+C1TtYsHoHg5wRjB7mHXc2bf180n73hNY7E5GwFMiyF9cA9wEr8D6q/KEx5ifW2peCHZyISCAGRUVy2oh0ThuRzhGPh01VTXy0oa597FnC3Nl8QeudiUgYC+SR5cVAkbW2FcAYEwX8CVBBJiJhJ8LhYMTgZEYMTuaL542gelcLuRff2um5B+7/JavHnc/I/BQ92hSRkAqkINvRVowBWGsPGWOqgxiTiEiPyUqNI2Xbpk6PuSo38fjfVzHIGcGoIS7GjUhnfEEaqUkxvRyliAx0gRRkWcaYHwEL8Y4hOxtID2pUIiI9yN96Z/sLirj4rHxWle9kVXk9q8rreR7IdcczriCdcQVpFAxOIjIioveDFpEBJZCC7CbgCeBuvAXZPODHwQxKRKQn+Vvv7Mgtt/KlC0bwpQtGUNe4j9Xl9awq30nplkYq67bw5uItxMc4GTM8jXEFaYwZlkpinBakFZGeF8gsy3rgax3bjDFjgPpgBSUi0pNOtt4ZgDsllgsn5nLhxFwOHDxMyZYGVvt6zpasr2HJ+hocDhiek8S4Au+jzbyMBBwOrXkmIqfOb0FmjCkGSoBrOzn8NeAzwQpKRKSndWW9s+hBkZzm2wXA4/GwvW4vq8p3srq8no3bd1O+vYnZ8zfhSoxm7PA0xhekMWqoi5hBgTx0EBE53on+7/E0cA1wO7DkmGODT3ZhY0wEMNf32UFAAXA9EAs8CGwCCoE7rbU1vs/cCiQBLuBta+1rXflhRER6msPhIDcjgdyMBC6dMpQ9+w6xtqKe1eX1rCmvZ/6qKuavqsIZ6cDku7i8cgkTZz9LdHmZ1jsTkYD5LcistZ8CMMb81Fr7j47HjDFfCPD6i6y19/k+Mwf4AvAp4F1r7cvGmMuBXwHXGmMmAedbay/xLa2x3hgz31rb2PUfS0QkOBJio5hcnMXk4iyOHPGuedbWe5Y6bw7TOlnvbNfhIxye8aUQRi0i4S6Q/vWjRrAaY75BAD1k1tojeBeUxRjjBHIBi7d37H7faQuBP/teXwYs8n32kDGmBDgHUC+ZiISliAgHI3KTGZHr3Wsz6Y8/6vS8prvv4+nDRYwZnsbY4alkpcZp7JmIHCWQgmwqHRaBtdb+yRjzf4HewBjzWbyzMl+31i43xmQAzb7DTYDLV7Bl4B2zRodjGSe6tssVh9PpfzFHtzsx0DAlRJSjvkF5CtDGsk6b8+q3sbZiF2srdvHSe+B2xXK6yWDiyAzGF7qJi4k65VsrR+FPOQp/oczRiQb1/wvvMheFvlmVbSLxbqEUEGvtW8BbxpjnjDE/AGqBRKAR73ixBmttqzGmrb1Nku9cvxoaWvwec7sTqatr9ntcQk856huUp8C5/Kx35hk5ikf/exprN9WztmIX6yp28dbiLby1eAuREQ4KBiczdngqY4alkZeZQEQXe8+Uo/CnHIW/3sjRiQq+E/WQ3eP7fiPedcja7AdWn+ymvlmaw6y1b/iaKoDhwBvAFGAbMM33HuB1vGudtT3iLAbmn+w+IiLhwt96Zy033oQrMZpPjc/hU+NzOHzkCBU7mlm7qZ41m3axYVsjZdsaeeWDTSTFRTF6mPfRZvGwVJK07pnIgODweDwnPMEY47LWNhhjEgCstXsCubAxpgB4BFgJRAGjgBuAg8BDwBa8My9vP2aWpcv3Ne9ksyzr6pr9Bq9/jYQ/5ahvUJ66Jnr2rBOud9aZ5paDrN/c4C3QKnbRtPcg4H0UMTQ7sb1AG57T+a4BylH4U47CXy/1kPnt/g6kIBsFPAec7mtaAVxnrS3x/6neoYKsb1OO+gblqXcd8XiorN3jHXO2qZ4Nlbs5fMT7v7rYaCejh7oYM9y7a0D2e68T9/ijOMtKadUSG2FNv0fhL9QFWSCD+p8Cfgl8gPcfbOf52s7vieBEROQTEQ4H+ZmJ5GcmcsnkIew70ErplgbW+Aq05baO5baOT5X+h9s6WWKjCVSUifRBgRRkm45Zh2yWb+akiIgEWWy0kwlFbiYUufF4PNQ07GPNpnrOf+mmTs9v/eWDlE/6NEOzErUpukgfEkhBVmWMGWatrQAwxgwDtvpe32Gt/WUwAxQRES+Hw0FWahxZqXGk12zp9JykreXc/9wKYqOdjMxPoXhoKsVDXVr7TCTMBVKQfQO4wxhT43ufAWw3xlwPpOJ9nCkiIr3osJ8lNlqGFXLuaTms37yLjzbs5KMNOwFwJUZTPMRF8dBURg11kZIQ3dshi8gJBFKQvYdvOYpjOPCtxC8iIr3L3xIb3HYb1108EoC6xn2UbGlg/eZdrN/cwMK11SxcWw3A4PR4Rg31FmgmL4XYaG2MLhJKgfwG/sBa2+kKrMaY/+rheEREJAAHps+gCYh74rFPZlkes8SGOyUWd0os54zPaZ+9uX6zt0Ar29bI9uV7eXd5JREOB8Nzkij2FWjDc5JwRmr8mUhvCmTZizS8syov9jXNA/7bWlsf5NhOSste9G3KUd+gPIW/7uToUOsRNlXtZt3mBko272LTjiba/jqIjorE5Ke0P+IcvmAe8R3XVtPyGl2m36Pw1xeWvfgfvI8tf473MeVUX9vXeyQ6ERHpdVHOCEy+C5PvgnOG07L/EHZro7cHbcsuVpfXs7q8XstriPSSQAqyamvt7zu8X2uMGRmsgEREpPfFxUS1L68BsKtpPyVbGpj68s2dnr/vFw+wcPhUzBAX7uQYzeAUOUWBFGQ5xhintbYVwBgTBWQHNywREQml1KQYpo3NJn3H5k6Pp1VV8Md5pb5zozF5LkbmpzByiIt0FWgiXRZIQTYXqDDGfAR4gAnALUGNSkREwoK/5TUOjTB89dNFlG5twG5tZNG6ahat887gTEuK9j0OTWFkvgt3Smxvhy3S55y0ILPW/s0Yswq4yNd0m7XWBjcsEREJB/6W1zh08y1cODGXCyfmcsTjoWrnXkq3eIszu62RD9dW8+HatgIthpH5KZh8by9augo0keMEtPCMtbYUKA1yLCIiEmY6Lq/RPsvymOU1IhwOct0J5LoTuOiMPG+BVre3vfesdOvRa6C1FWgjh3h70dKTvQVa9OxZxD3+qGZzyoB00mUvwpmWvejblKO+QXkKf+GeoyMeD9s7FGh2awN797e2H09PjuHKHcu44n9/dtxnm55+tl8UZeGeI+kby16IiIh0W4TDQV5GAnkZCXza14O2vc77iLN0awNl2xoZN+v/Ov1s1GO/Yv+VV2mSgPR7KshERKRXHVWgnekt0DIequz03KgNlpm/XkBhbgpFuckU5qWQn5lAZIR2EpD+RQWZiIiEVITD4Xc2Z33OMJyREawsq2NlWR0A0YMiGZGTRGFeCkW5KQzPSWJQVGRvhy3So1SQiYhIyPmbzRn7szv51ZVTqd+9n7LKRsq27WZDZSPrNjewbnMDAJERDoZmJ1KUm0JhXgqFucnEx0T19o8gckpUkImISMidaDanA0hPiSU9JZapY7zrkje1HGSDrzgr29ZIRVUz5dubmLdkKw5gsDu+vQetKC8FV2L0UffTjE4JN0GbZWmMKQDuA1YCuUC9tfbnxphU4EFgE1AI3GmtrfF95lYgCXABb1trXzvRPTTLsm9TjvoG5Sn8KUew/2Ar5dubKNvWyIbKRsqrmjjUeqT9uDslpr0H7czV/yb/5u8dd41gzuhUjsJff55lmQq8ZK2dA2CMWW+MeQP4DvCutfZlY8zlwK+Aa40xk4DzrbWX+LZnWm+MmW+tbQxijCIi0g/EDHIyelgqo4elAtB6+Aibq5vZsK3RV6Ttbl8L7fTnftnpNeKeeEy9ZBIyQSvIrLXLjmmKAPYClwL3+9oWAn/2vb4MWOT77CFjTAlwDnDCXjIREZFjOSMjGDE4mRGDk/nc5CHti9WWVTYy5PHOZ3Q6Skt46b0NFAxOpiAnidSkmF6OWgayXhlDZoyZDrxlrS01xmQAbX2CTYDLGOMEMoCSDh9r8rX55XLF4XT6n1njdieeUtwSfMpR36A8hT/l6OQyM5KYMDobRhfDmjXHHd+alsfby7bBsm2Ad8FaMzSVUUNTGTnExfDBKUQ5u7/chnIU/kKZo6AXZMaY84HzgZm+plogEWjEO16swVrbaoxpa2+T5DvXr4aGFr/H9Lw+/ClHfYPyFP6Uo66J/uGPO53RmXTvT/l/Z02gvKqJ8u27Kd++m4Wrqli4qgrw9roNzUqkYHASBTnJFAxOPm6ygD/KUfjrpTFkfo8FtSAzxlwKfAq4Ecg2xgwB3gCmANuAab73AK8Dd/s+5wSKgfnBjE9ERAYefzM6j0yfgQFMvgsAj8dDXeM+yrc3sbHKW6Btqmpi4/bdeP8Kg7SkaN8jTm+Blp+ZgDPyk160ttmclJXi0mxOOYFgzrKcCHwALPc1xQO/xTsm7CFgC1AA3H7MLEuX72ueZln2b8pR36A8hT/lqPccOHiYih1NlFft9hZq23ezZ9+h9uNRzrZetGSmrZ/PaffOPO4a/WV/zv4m1LMstbm4hIxy1DcoT+FPOQodj8dDbeM+3yNOb4FWWbcHjweefO5Ghu3cctxnDo4aze4PFoUgWjmRUBdkWhhWRESkmxwOB5muODJdce2L1u470MrmHU1+Z3NG2FLuemYpw3MSGZadxLDsJAa747U/5wCngkxERKQHxUY7GTU0lSNmJBGd7M9ZkzmE2oYWKuv2MH/VDgAGOSPIz0pkWFYSw3ISGZ6dhDslFofDb4eK9DMqyERERILA3/6ciff8lN9ecQ7b6/ZSsaPJ99XMpu1NbKzc3X5efIyzvQdtWHYSw3KSSI4f1Om9tBVU36eCTEREJAg6zuZ0lpXS2mF/zkggPzOR/MxEzj1tsPf8Q4fZWtNMRVUTm3Y0sXlHM2srdrG2Ylf7NdOSohmancRwX5E2JCuRlDdfParwc5asI+m719Pki0H6Bg3ql5BRjvoG5Sn8KUfhr7s52rPv0Ce9aFXe700tn8zqdABPvfBjcqsrjvtsa/EYGv794amEPaBoUL+IiIh0KiE2irHD0xg7PA3wzurc1XSAih1tvWhNZNccP5MTwGFLeG9FJUMyE8nLSCB6kP+dbST0VJCJiIj0EQ6Hg7TkGNKSYzhjpHd3wSNPjyKyk8kDW115/PWdMt/nIDstniGZCQzJTGRIlvdxaWy0yoBwoUyIiIj0Yftm3kxUJ5MHHP/vNr49cRRbqvewpaaZrTXNVO3cy6J1Ne3nZLpiGZKVyJDMRPJ93xNio/zeS5MHgkcFmYiISB/mbyuo+OkzmApMHeM974jHQ23DPrZUN7Olptn7vbqZpSW1LC35ZOvo9OSYowq0oVmJJMUPInr2LE0eCCIN6peQUY76BuUp/ClH4S9cc+TxeNi5e/9RRdrm6uajtoMCcCVG8/AffkhWVflx1+gvkwc0qF9ERERCwuFw4E6JxZ0S2z4mzePx0NB84KhetC01zbh3HD+TE7yTB+avqiIvI4Gc9HiiozR5oDtUkImIiEg7h8NBalIMqUkxTCh0t7e3/m0kkXb9cedvdeXxp3ml3s8CGalx5LnjyctIIDcjgTx3AmnJMV3edWCgjVdTQSYiIiIndeCmW4juZPJA6y23cN3phsravWyr20Nl7R6W72phua1rPydmUGR7cdb2fbA73u8sz4E4Xk0FmYiIiJyUv8kDKdNncG6H89oeeW6r3UNl3R7f973HbQ0F3gkEeRkJ5LoT2nvUMlJiiXv80U5jiHviMRVkIiIiMrAdmD7jpAVRx0ee40ekt7cfaj1M1c6WDkWa9/tHG3by0Yad7ecNckbwsi3p9NqRZaU984OEIRVkIiIiEnRRzkjvmmdZiUe17957kMraT4q0yto9bEvNY+jO43cgqHLn88K8UnLS48lJjyMnLR5XYnSXx6d11DZWjbJSXCEcq6aCTEREREImOX4QycNSGT0stb3NmXwXfP9bx5374unTmb+q6qi22OhIctLiyU6PJyctvr1YS02KIeIkhVo4jVVTQSYiIiJhpfWqL9IU4ThuvNo1l3+BCxtaqNq51/tV38KOnXvZXN1MeVXTUdeIjookOy3OV6D5ijV3POnJnxRq4TRWTQWZiIiIhJ3OxqtFAblu7ySAjloPH6G2YZ+vSPMVa77xapurj17sdZAzgixfoXaH7XxMWijGqgWtIDPGZAH3AeOttWf62lKBB4FNQCFwp7W2xnfsViAJcAFvW2tfC1ZsIiIi0n84IyPae8I6OnzkCDsb9x9VqG3fuZcd9S1srdnDltRchnUyVu1w0cjeCr1dMHvIzgbmAKd1aHsAeNda+7Ix5nLgV8C1xphJwPnW2kuMMVHAemPMfGttYxDjExERkX4sMiKCzNQ4MlPjmMAni9weOeJhZ9N+mpNvgrtvPO5zLTfe1JthAhARrAtba2cBx24KdSmwyPd6oe89wGVt7dbaQ0AJcE6wYhMREZGBKyLCQUZKLNnf/yZNTz9La/EYcDppLR5D09PPDohZlhl8UqQ1AS5jjNPX3nHRkSZf2wm5XHE4nf73zHK7E/0ek/CgHPUNylP4U47Cn3IUpv7rm94vvEVRUojC6O2CrBZIBBrx/swN1tpWY0xbe5sk37kn1NDQ4vdYb+zaLqdGOeoblKfwpxyFP+Uo/PVGjk5UlAftkaUfbwBTfK+n+d4DvN7W7usxKwbm93JsIiIiIiERzFmW5wLXAtnGmJ8CjwJ3Ag8ZY4qAAuAWAGvtEmPMv4wxD+CdZXmTBvSLiIjIQBG0gsxa+wHwwTHN+4Dv+Dn/kWDFIiIiIhLOHB6PJ9QxiIiIiAxovT2GTERERESOoYJMREREJMRUkImIiIiEmAoyERERkRBTQSYiIiISYirIREREREJMBZmIiIhIiKkgExEREQkxFWQiIiIiIaaCTERERCTEVJCJiIiIhJgKMhEREZEQU0EmIiIiEmIqyERERERCTAWZiIiISIipIBMREREJMRVkIiIiIiGmgkxEREQkxFSQiYiIiISYCjIRERGREFNBJiIiIhJiKshEREREQkwFmYiIiEiIqSATERERCTEVZCIiIiIhpoJMREREJMRUkImIiIiEmAoyERERkRBTQSYiIiISYirIREREREJMBZmIiIhIiDlDHcCpqKtr9vg75nLF0dDQ0pvhSBcpR32D8hT+lKPwpxyFv97Ikdud6PB3rN/2kDmdkaEOQU5COeoblKfwpxyFP+Uo/IU6R/22IBMRERHpK1SQiYiIiISYCjIRERGREFNBJiIiIhJiKshEREREQqxPL3shIiIiEojrH3z/hMfnPnpFL0XSOfWQiYiIiISYCjIRERGREFNBJiIiIhJiKshEREREQkwFmYiIiEiIqSATERERCTEVZCIiIiIhpoJMREREJMRUkImIiIiEmFbqD8DJVvd99vYLeikSERER6Y/UQyYiIiISYirIREREREJMBZmIiIhIiKkgExEREQkxFWQiIiIiIaZZliIiIhIyWsnASz1kIiIiIiGmgkxEREQkxFSQiYiIiISYCjIRERGREFNBJiIiIhJiKshEREREQkwFmYiIiEiIhd06ZMaYWGAJ8La19pZQxyMiIiISbOHYQ3Yf8FGogxARERHpLWFVkBljrgUWAhWhjkVERESkt4TNI0tjTDEwylp7pzFmXCCfcbnicDoj/R53uxN7KrwT6q379Ef6s+sblKfwpxyFP+Woe3rzzy2UOQqbggyYDuw3xtwOnA0MMsbMtNY+7u8DDQ0tfi/mdidSV9fc81F2orfu09/0Zo6k+5Sn8KcchT/lqPt6888t2Pc6UcEXNgWZtfb+ttfGmBgg4UTFmIiIiEh/EVZjyACMMVcB5wCTjTFXhzoeERERkWALmx6yNtbaV4BXQh2HiIiISG8Jux4yERERkYFGBZmIiIhIiKkgExEREQkxFWQiIiIiIRZ2g/pFREQk9K5/8H2/x569/YJejGRgUA+ZiIiISIh1qYfMGOO/XP7EemvtD7sZj4iIiMiA09VHls3AYyc559puxiIiIiIyIHW1IHvHWvvBiU4wxphTiEdERERkwOnSGDJr7W/8HTPGfNN3zu9PNSgRERGRgaTLsyyNMXlAirV2TYe2c4AfA3/swdgGnBPNaAHNahEREemvujqo/wbgASDKGPMH4LfAU0Aa4Lf3TERERET862oP2ecAN5AKfAQkA7+w1gYy+1JEREREOtHVdci2Wmv3WWu3AyuBr7cVY8YYLTIrIiIi0g1dLcgOd3i9yVrr6fD+ZMthiIiIiEgnutqrdZ0x5krf6+QOrwESgRt6JiwRERGRgaOrBdm7dN4T5kDFmIiIiEi3dLUgu81aazs7YIyp6oF4RERERAacro4hm+zvgLW27BRjERERERmQutpDdocx5ly8jyg9vq8mYJG19uWeDk5ERERkIOhqQfYva+33OzYYYzKAa40xd1tr7+250EREREQGhq4+svzhsQ3W2lpr7aPAxJ4JSURERGRg6erm4odPcDj6FGMRERERGZC6VJAZY67y054GpPdIRCIiIiIDTFfHkN1pjOn4aNKBd2/LS/BuMi4iIiIiXdTVgiweyO7w3gM0AzM1y1JERESke7pakD1srX02KJEAxpgC4D68G5fnAvXW2p8H634iIiIi4aBLBVkwizGfVOAla+0cAGPMemPMG9baFUG+r4iIiEjIdKkgM8YsAN631t51TPuTwIXW2tGnEoy1dtkxTRHA3lO5poiIiEi46+o6ZGustXcZY/5ojFlsjLkZwFp7A/B+TwZmjJkOvGWtLe3J64qIiIiEm66OIfMAWGu/aYx50bcg7FHHeoIx5nzgfGDmic5zueJwOiP9Hne7E3sqpBPqb/fpTf3xZ+qPlKfwpxyFv57I0eU3zznh8bmPXnHK9whEb/731l/vdayuFmQd9VgB1pEx5lLgU8CNQLYxZoi1dlFn5zY0tPi9jtudSF1dczBCPE5/u09v6c0cSfcpT+FPOQp/vZWj/vj3UX+614kKvq4WZJ82xrzgez21w2uA07sa2LF8a5z9DVgO/AvvMhu/BTotyERERET6g64WZI2A9b22xxwrONVgfLMpE071OiIiIiJ9SVcLsp9ba+d2dsAYs7wH4hEREREZcLq6uXinxZjv2BunHo6IiIjIwNPVzcWfCOCch7ofjoiIiMjA09VHllONMXed5Jxh3Q1GREREZCDqakH2OuA4yTlvdTMWERERkQGpq3tZ3husQEREREQGqlNZGFb6qOsfPPEuV8/efkEvRSIiIiLQ9b0sRURERKSHqSATERERCbFuPbI0xsQATmvtHmPMCGAUMM9a29qj0YmIiIgMAN3tIXsBuNYY48a7z+Q3gd/1WFQiIiIiA0h3C7KN1trfAVcDL1hrvwDs7bmwRERERAaO7hZk8cYYB/A14Dlf28nWJxMRERGRTnS3INsJNAK7rbUrjDG3AsN7LiwRERGRgaO7BdkrwFjgM773zwPX9khEIiIiIgNMdxeGXQBcY63dCmCtre65kEREREQGlu72kL1vrX29Y4MxZmoPxCMiIiIy4HS3h+wjY8zDwDvAAV/bjcCHPRKViIiIyADS3YLsRmAVcGaHthGnHo6IiIjIwNPdguxJa+09HRuMMRrULyIiItIN3SrIrLX3GGMGAWMAD7DWWvt8j0YmIiIiMkB0dy/LCcBsIB7vgrDNxpjp1tqPezI4ERGRvuD6B98/4fG5j17RS5FIX9XdWZa3AZ+11rqttenA54A7ei4sERERkYGjuwXZFmutbXtjrS0FKnsmJBEREZGBpbsF2TBjzJi2N8aYsUBez4QkIiIiMrB0d5blA8Brxph0vIP6dwLTeywq6TdONK5CYypERES8uluQeYBzgBTf+1JrbWvPhCQiIiIysJzqXpavn/TMLjLGXAR8AagFPNbae3v6HiIiIiLhJKz2sjTGxAH/C/zYt/DsOGPMhad6XREREZFwFm57WU7BO4Oz7ZoLgUuB907xuiIiIiJhK9z2sswAmju8b/K1iYiIiPRbDo/H0+UPGWPu6Wwvy1PdPsn3ePJOa+2Fvvc3AbnW2ps6O7+19bDH6Yw8lVtKP3H5zXNOeLynZnT2t/v05r36231Odi/lKPT36e17iQTA4e9Ad3vIPm+MqbHW/q6toYf2slwEDDHGRPseW04DnvJ3ckNDi98Lud2J1NU1+z0uodebOdJ9wv9+/e3PTjkK//v05r30d1L4640cud2Jfo91d1D/gY7FGIAxprvXametbQG+DzxpjLkPWG2t1fgxERER6de620P2pjFmrLV2TYe2x4EbTjUga+07eCcLiIiIiAwI3S3Irgd+ZoypwzvL0gG46IGCTERERGSg6W5BVgmc1+G9A7jnVIMRERERGYi6W5B91jfeq50x5ps9EI+IiIjIgNPdgizBGPM7IBb4JvAYcDvQ0FOBiYiIiAwU3Z0Z+QgwH+9sy714tzt6uMeiEhERERlAuluQbbfWPvP/27vzIEnKMo/j32F6gRlsoIECPBFRHyUEdL0vBBTRBWVBDdcNcRc23FBX5BAUBQ0UVEAQT2A1QMU7BEIEdBHFExA8WBZWedCVSxFplnYZGERn7P2jsrUdp3qmqqvyzar6fiImpiszO/OpfqZqfv3mW5nAPQCZeTXw275VJUmSNEZ6DWRbVn/PAkTEJsAOomVitgAAFc1JREFUfalIkiRpzPQ6h+zrEXEdsFFEXAQ8CTi4f2VJkrR4Zx21R+kSpPXSUyDLzC9GxDXAnrQveXF4ZmZfK5O64JuuJGmY9TpCRmbeANzQx1okSZLG0qLvPylJkqTFMZBJkiQVZiCTJEkqzEAmSZJUmIFMkiSpMAOZJElSYQYySZKkwgxkkiRJhRnIJEmSCjOQSZIkFWYgkyRJKsxAJkmSVJiBTJIkqTADmSRJUmETpQuQhslZR+1RugRJ0ghyhEySJKkwR8gkSbVypFn6a40JZBFxKrASuAfYBTg0M28vW5UkSdLgNemU5b2ZeXRmvge4Gji6dEGSJEl1aEwgy8xj5j3cgPZImSRJ0sir9ZRlRFwMbLOWVW/PzC9X22wOPB94SZ21SZIklVJrIMvMvRZaHxGbAacBB2XmXeva39TUciYmlnZc32pNdl2j6mWPelP3z62O49X1nEbtOHUez9fr4vjza76SPWrSpP6tgPcDR2bmryLiJZl57kLfMzOzsuO6VmuS6ekVfa5S/WSPelf3z62O49X1nEbtOHUez9dr73y/a746erRQ4GtMIAO+Rruez0QEwApgwUAmSZI0ChoTyDLzb0vXIDWF12mSpPHSmE9ZSpIkjavGjJBJkspyZFYqxxEySZKkwhwhk8acoyKSVJ4jZJIkSYUZyCRJkgozkEmSJBXmHDJJtXCuWu/82Umjz0AmaaQYXiQNI09ZSpIkFeYImST1yNE4Sf3iCJkkSVJhBjJJkqTCDGSSJEmFGcgkSZIKM5BJkiQVZiCTJEkqbMns7GzpGiRJksaaI2SSJEmFGcgkSZIKM5BJkiQVZiCTJEkqzEAmSZJUmIFMkiSpMAOZJElSYQYySZKkwgxkkiRJhRnIJEmSCjOQSZIkFWYgkyRJKsxAJkmSVJiBTJIkqTADmSRJUmEGMkmSpMIMZJIkSYUZyCRJkgozkEmSJBVmIJMkSSrMQCZJklSYgUySJKkwA5kkSVJhBjJJkqTCDGSSJEmFGcgkSZIKM5BJkiQVZiCTJEkqzEAmSZJUmIFMkiSpMAOZJElSYROlC1iM6ekVs53WTU0tZ2ZmZZ3lqEv2aDjYp+azR81nj5qvjh61WpNLOq0b2RGyiYmlpUvQOtij4WCfms8eNZ89ar7SPRrZQCZJkjQsDGSSJEmFGcgkSZIKa9yk/oj4PvC76uHqzHxuyXokSZIGrXGBDPiPzDy2dBGSJEl1aWIg2yki3gwsA36QmReVLkiSJA23g064dMH1F5yyb02VrF0T55CdmJknAscBb42IXUsXJEmSNEiNGyHLzKuqv1dHxHeB3YHvrG3bqanlC143pNWaHEiN6h97NBzsU/PZo+azR81XskeNCmQR8RjgmZl5ZrXoUcB5nbZf6Iq6rdYk09Mr+lug+soeDQf71Hz2qPns0XAYdI8WCnyNCmTA3cA+EfEgYFPgVuBzZUuSJEkarEYFssy8DdivdB2SJEl1auKkfkmSpLFiIJMkSSrMQCZJklSYgUySJKkwA5kkSVJhBjJJkqTCDGSSJEmFGcgkSZIKM5BJkiQVZiCTJEkqzEAmSZJUmIFMkiSpMAOZJElSYQYySZKkwgxkkiRJhRnIJEmSCpsoXcCaImIZcCXwtcw8onQ9kiRJg9bEEbLjgatLFyFJklSXRgWyiDgAuAy4sXQtkiRJdWlMIIuIHYHHZuZ5pWuRJEmq05LZ2dnSNQAQEUcDS4HfA88DNgTOy8z3d/qeVatWz05MLK2pQkmSNKxe9MbzF1x/wSn71lHGkk4rGjOpPzPfNfd1RGwMPGChMAYwM7Oy47pWa5Lp6RX9K1B9Z4+Gg31qPnvUfPZoOAy6R63WZMd1jTllOSciXgLsCjwtIl5Ruh5JkqRBa8wI2ZzMPBc4t3QdkiRJdWncCJkkSdK4MZBJkiQVZiCTJEkqzEAmSZJUWOMm9UuSpPFx0AmXLrj+rKP2qKmSshwhkyRJKsxAJkmSVJiBTJIkqTADmSRJUmEGMkmSpMIMZJIkSYUZyCRJkgozkEmSJBVmIJMkSSrMQCZJklSYgUySJKmwru5lGREL33Cq7SeZ+foe65EkSRo73d5cfAXwvnVsc0CPtRARGwAXAFcCGwI7AAdl5n297lOSJKnpug1kl2TmtxfaICJiEfUAXJGZx1f7Oh/YH/jMIvcpSZLUWF0Fssz88Hps89Fei8nMPwJzYWwCeAiQve5PkiRpGHQ7QvYnETEJvBXYGbgVODEzb+xHURGxF3AYcGFm/rDTdlNTy5mYWNpxP63WZD/K0QDZo+Fgn5rPHjWfPepNnT+3kj3qOZAB7wQuB84Ctq0e9zx/bL7MvBi4OCLOjojXZeZpa9tuZmZlx320WpNMT6/oRzkaEHs0HOxT89mj5rNHvavz5zboYy0U+Lq67EVEnBsR21UPlwPfzcyfAVcAv+u5wj/vf8eI2HveohuBRyx2v5IkSU3W7QjZm4EPRMTlwBnAuRGxDXAP8PY+1HM/8C8R8QTgb4DHAm/ow34lSZIaq9tJ/T8H/j4iXgGcCByRmVf0q5jM/B/an6qUJEkaG11fqT8iHkd77tjLgAMi4rSI2LTvlUmSJI2JbueQfYj25P2PAy/NzNcBZwPnVKNmkiRJ6lK3I2T3Zub+mbkH8ASAzPw+8ELgwf0uTpIkaRx0O6l/+4g4GNgK+NM1JzJzNXByPwuTJEkaF92OkL2m+vtG4Og+1yJJkjSWuv2U5QzwoQHVIkmSNJa6ndT/gfXY5sTey5EkSRo/3c4he0ZErOsCsNv3WowkSdI46jaQXQgsWcc2F/dYiyRJ0ljqdg7ZOwZViCRJao6DTri047qzjtqjxkrGQ9dX6pckSVJ/GcgkSZIKM5BJkiQV1u2kfgAiYmNgIjPviYhHAo8FvpqZq/panSRJ0hjodYTss8ABEdECrgAOBE7vW1WSJEljpNdA9vPMPB14BfDZzNwfuLd/ZUmSJI2Pnk5ZAptExBLglcBrq2Xruj7ZOkXEDsDxwI+BhwD/m5nvXOx+JUmSmqzXEbI7gd8C/5eZP4qII4FH9KGeLYDPZ+Z7M/MQ4B8i4ol92K8kSVJj9TpCdi5wJnBr9fhTwMcWW0xm/mCNRRvgqVBJkjTieg1k3wP+MTNvAcjM2/tXUltE7AdcnJnXd9pmamo5ExNLO+6j1Zrsd1nqM3s0HOxT89mj5hulHtX5XEb1WGvqNZBdmpkXzl8QEc/IzMv7UBMRsTuwO3DoQtvNzKzsuK7VmmR6ekU/ytGA2KPhYJ+azx4136j1qM7nMkrHWijw9RrIro6Ik4BLgPurZYcAiw5kEbE38Oxqfw+MiO0y84rF7leSJKmpeg1khwDXAE+et+yRiy2mmsD/BeCHwDeBTYCP0L7WmSRJ0kjqNZB9MDOPnb8gIg5YbDGZ+SPgAYvdjyRJ0jDpKZBl5rERsSHwOGAWuC4zP9XXyiRJksZET9chi4gnADcAF9OeR3ZDRDy+n4VJkiSNi14vDPsmYK/MbGXmVsALgbf0ryxJkqTx0Wsguzkzc+5Bda2wX/anJEmSpPHSayDbPiIeN/cgInYCHtqfkiRJksZLr5+yfDfw5YjYivak/juB/fpWlSRJ0hjpNZDNArsCm1ePr8/MVf0pSZIkabws9l6WF65zS0mSJC2o1zlka72XZR/qkSRJGjuNu5elJEnSuGnUvSwlSZLGUaPuZSlJkjSOep1D9uKIeO38Bd7LUpIkqTe9BrL7M/P0+Qsiotd9SZIkjbVeT1l+JSJ2ysxr5y17P/CGPtQkSZLW4qATLl1w/VlH7VFTJeq3XgPZQcDbImKa9qcslwBTGMgkSZK61msg+yWw27zHS4BjF1tMRGwLHA/skplPXtf2kiRJo6DXQLZXZq6cvyAiDuxDPc8Czgce34d9SZIkDYVeA9kDIuJ0YBlwIPA+4ChgZjHFZOY5EbHbYvYhSZI0bHoNZO8FvgPslpn3RsQZwEnAq/tW2XqYmlrOxMTSjutbrckaq1Ev7NFwsE/NZ4+ar44e1fXvoM5/b6N6rDX1Gsh+lZlnRsSTADLz6oj4bR/rWi8zMys7rmu1JpmeXlFjNeqWPRoO9qn57FHz1dWjuv4d1PnvbZSOtVDg6/XaYVtWf88CRMQmwA497kuSJGms9RrIvh4R1wF7RsRFwC+Azy+2mIh4DnAA8MCIOCYili12n5IkSU3X0ynLzPxiRFwD7En7kheHZ2YutpjM/Dbw7cXuR5IkaZj0OoeMzLwBuKGPtUiSJI2lngPZOPFWFZIkaZC8IbgkSVJhBjJJkqTCDGSSJEmFGcgkSZIKM5BJkiQV5qcsG8RPc0qSNJ4cIZMkSSrMQCZJklSYgUySJKkwA5kkSVJhTuqXJGmR1vWhrAtO2bemSjSsDGRjyE9zSpLULJ6ylCRJKsxAJkmSVFjjTllGxPOA/YE7gNnMfEfhkiRJkgaqUSNkEbEcOAM4LDOPBXaOiOeWrUqSJGmwmjZC9nTg5sy8v3p8GbA38I1yJWkxFvoAgZ86kiSprVEjZMDWwIp5j++ulkmSJI2sJbOzs6Vr+JPq9ORbM/O51ePDgYdk5uFr237VqtWzExNL6yxRDfWiN56/4Pp+jcaN2nHqPNaoHWddx7JH5Y9T97Gk9bCk04qmnbK8AtguIjaqTls+Ezit08YzMys77qjVmmR6ekXH9Sqvzh55nOYfb9R+dvao+cep81j+n9R8dfSo1ZrsuK5RpywzcyXwWuCDEXE88F+Z6fwxSZI00po2QkZmXgJcUroODRfvLiBJGmaNGiGTJEkaRwYySZKkwgxkkiRJhTVuDpkkSf3i/FINCwOZ1AXf3CVJg+ApS0mSpMIMZJIkSYUZyCRJkgpzDpnUQM5Vk6Tx4giZJElSYY6QSWPO0ThJKs8RMkmSpMIMZJIkSYV5ylJSLTw1KkmdGcgkSbUynEt/zUAmaaT4n72kYdSYQBYRGwCvBo4D9sjM6wqXJEmSVIsmTerfBbgSWFm6EEmSpDo1ZoQsM68GiIjSpUjSehm106Oj9nykYVJrIIuIi4Ft1rLq7Zn55TprkaRhYVCSRt+S2dnZ0jX8hYi4CdhnfeaQrVq1enZiYunAa5IkSeqDJZ1WNOaUZS9mZjpPN2u1JpmeXlFjNeqWPRoO9qn57FHz2aPmq6NHrdZkx3WNmdQfEVMRcQywGfCvEfG00jVJkiTVoTEjZJk5Axxf/ZEkSRobjRkhkyRJGlcGMkmSpMIa9ylLSZKkceMImSRJUmEGMkmSpMIMZJIkSYUZyCRJkgozkEmSJBVmIJMkSSqsMVfq7yQitqV99f5dMvPJ1bJTgZXAPcAuwKGZeXu17khgU2AK+Fpmfrla/njg34Abga2BIzJzVURsDJwM/Ap4FHBCZt5Q41Mcet30KCL+DngZ8N/AzsC5mXl+9T32aEC6fR1V6x8D/AB4RWZeWC2zRwPSw3vd3sDjgGXA7sDzMvMP9mhwunyv2xD4KHATsA1wW2YeV32PPRqQDj06BNgJuAF4Ju2f6xXVusZkhmEYIXsWcD5/eYf0ezPz6Mx8D3A1cDRARDwV2D0z3wYcBpwSEZtHxBLg08DbMvPdwGrgn6p9HQrcUu3rVODMOp7UiFnvHgEPBd6emScDRwJnR8QG9mjguukREbEMeBNw7bxl9miwunmv2x54cWaemJnH0v6PY7U9GrhuXkf7AVPz+nN4RDzYHg3c2nq0EXBwZp4EfAJ4JzQvMzQ+kGXmOcCKNZYdM+/hBrR/MwHYB7ii2uYPwE+BXYFHAMvm/fZ/GbB39fXe877nWmCXiNi0/89kdHXTo8z898y8dd7yezPzj9ijgerydQTwLuA44PfzltmjAeqyRy8HVkbEYRFxHLC1r6PB67JHvwG2qr7eFLgNuAt7NFAdenRSZt5XPXwk8JPq60ZlhsafslxIRGwOPB94SbVoa9o/0Dl3V8um+csGzS2f+561rbt7ACWPnbX0aL43AQdXX3fqw0Lr7FEfrNmjiHgVcFlm3hgR8ze1R4Ws5XW0HfBo4HBgQ+A/I2JfYEvsURFr9igzvxURP46Is2n/nD+ZmfdFhK+jAqpTmW8BngDsXy1uVGYY2kAWEZsBpwEHZeZd1eI7gMl5m21aLeu0fKHv0SJ16NHcuiOAazPz3GqRPSqgQ492BzIijgIeBry0mg9zDfaodh16dDdwVWbOAvdHxDXAM4DvYo9qt7YeRcQbgA0z81URsQFwZURcByT2qHbVaNchEbEH8BXgKTQsMzT+lOXaRMRWwEeAI6vf4ud+a7wQeHq1zQSwI/Ad4BfAfVVChvakvouqry+a9z07Addkpr+NLNICPSIijgFuzcyzImK3iNgSe1S7Tj3KzAMz84TMPAG4BTgnM8/DHtVugdfRN2ifVpmzHe0Jy/aoZgv06KHArwGq08m/ATbGHtWumrg/50b+/NppVGZo/M3FI+I5wKuAFwCnA6fQPp87Qft8PMCKzHxRtf2RtD8tMQV8dY1PTBwM3AxswZ8/MbGM9icmfk373PK7/VRLd7rpUfVb4zH8+Rz+g4E9M/MmezQ43b6Oqu85nHY/vgecnpmX26PB6eG97ljav1RvAtxZTTL2vW6Aunyv2xb4EHAd7U/Cbkp7YvlqezQ4HXp0Eu35sHfS/iTs5zPzS9X2jckMjQ9kkiRJo24oT1lKkiSNEgOZJElSYQYySZKkwgxkkiRJhRnIJEmSCjOQSRppEfHwiLhpPbbbJyI+XX39uoi4LSJ2G3B5kgQYyCRpziW0b3hPZp5G+0KrklSLob11kiStKSKWAx8FbgeWAyuBFrBFRHwYuJ72TZ5PBr5O+xYoz6Z9pfXHAM8BHr7GPh8IfBX4Ge0Lff4AOBG4D9gMuDkz31PdHucjwP3ALNDKzFcO8OlKGiEGMkmj5AXAFnNBKCLeAnwYeE5mvn5uo4jYGdiLdhjbgfZtbj4HfGst+3wK8IV5V8I/DrgjM4+vHn8vIq4CZqrj7Djv2JK0XgxkkkbJD4FTIuJ84AvAqcC2Hbb9Vmauon2z54yIh69lm/2BlwIxb9kLgTsi4ozq8b20A91VwKqIuBT4LO3RMklaL84hkzQyMvMW4NHAx4CX0z692OkXz/vXY5d3AV+iHezmLAE+mZmvyczXAPsAn8vMFbTvk3cc8CzgpxEx1dMTkTR2DGSSRkZE7APsmpkXZua+wIOAe4Cl1foDu9zlt4AjgF0jYu9q2VeB58/b5mTgSRHxROCVmfnNzPxn4A7gYb0+F0njxZuLSxoZEfFU4FjgJ8DmtCfxnwx8hfZk/pW0Tyd+oPqW0zPz4xGxDDgD2A94d7Xte2ifhjwM+ATt05bvAs6iPWK2Ae2J/bdk5skRsQPt+WrXAxtV647ITN9kJa2TgUySJKkwT1lKkiQVZiCTJEkqzEAmSZJUmIFMkiSpMAOZJElSYQYySZKkwgxkkiRJhRnIJEmSCvt/wV9lgUFWaJQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x720 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fix, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, figsize=(10, 10))\n",
    "strikes = option_selection['STRIKE_PRC'].values\n",
    "ax1.plot(strikes, option_selection['CF_CLOSE'], label='market quotes')\n",
    "ax1.plot(strikes, option_selection['MODEL'], 'ro', label='model values')\n",
    "ax1.set_ylabel('option values')\n",
    "ax1.legend(loc=0)\n",
    "wi = 15\n",
    "ax2.bar(strikes - wi / 2., option_selection['ERRORS_EUR'], width=wi)\n",
    "ax2.set_ylabel('errors [EUR]')\n",
    "ax3.bar(strikes - wi / 2., option_selection['ERRORS_%'], width=wi)\n",
    "ax3.set_ylabel('errors [%]')\n",
    "ax3.set_xlabel('strikes');\n",
    "# plt.savefig('../../images/ch21/dx_cal_04.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Market-Based Valuation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Modeling Option Positions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "uuid": "40decf0f-1908-48e8-b5c3-0fa5b667575c"
   },
   "outputs": [],
   "source": [
    "me_dax = market_environment('me_dax', pricing_date)\n",
    "me_dax.add_constant('initial_value', initial_value)\n",
    "me_dax.add_constant('final_date', pricing_date)\n",
    "me_dax.add_constant('currency', 'EUR')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "uuid": "88c93f7b-7944-4724-8b7d-a8f9d231d926"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('volatility', opt_local[0])  \n",
    "me_dax.add_constant('lambda', opt_local[1])  \n",
    "me_dax.add_constant('mu', opt_local[2])  \n",
    "me_dax.add_constant('delta', opt_local[3])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "uuid": "8d92c037-79db-4663-9ad4-863dc720d160"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('model', 'jd')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "uuid": "ee26163e-cfc2-4bd4-99ef-d9d877dc9592"
   },
   "outputs": [],
   "source": [
    "payoff_func = 'np.maximum(strike - instrument_values, 0)'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "uuid": "f4882acb-2157-4073-b2e7-b9c79a428a2c"
   },
   "outputs": [],
   "source": [
    "shared = market_environment('share', pricing_date)  \n",
    "shared.add_constant('maturity', maturity)  \n",
    "shared.add_constant('currency', 'EUR')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "uuid": "e48619d3-c12d-4387-bc0d-51dccd00d19e"
   },
   "outputs": [],
   "source": [
    "option_positions = {}\n",
    "option_environments = {}\n",
    "for option in option_selection.index:\n",
    "    option_environments[option] = market_environment(\n",
    "        'am_put_%d' % option, pricing_date)  \n",
    "    strike = option_selection['STRIKE_PRC'].loc[option]  \n",
    "    option_environments[option].add_constant('strike', strike)  \n",
    "    option_environments[option].add_environment(shared)  \n",
    "    option_positions['am_put_%d' % strike] = \\\n",
    "                    derivatives_position(\n",
    "                        'am_put_%d' % strike,\n",
    "                        quantity=np.random.randint(10, 50),\n",
    "                        underlying='dax_model',\n",
    "                        mar_env=option_environments[option],\n",
    "                        otype='American',\n",
    "                        payoff_func=payoff_func)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Options Portfolio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "uuid": "f885f822-7d78-4841-99c5-f30f1bf23ebb"
   },
   "outputs": [],
   "source": [
    "val_env = market_environment('val_env', pricing_date)\n",
    "val_env.add_constant('starting_date', pricing_date)\n",
    "val_env.add_constant('final_date', pricing_date)  \n",
    "val_env.add_curve('discount_curve', csr)\n",
    "val_env.add_constant('frequency', 'B')\n",
    "val_env.add_constant('paths', 25000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "uuid": "d9a3a473-3cfb-49ab-be94-848349683a9a"
   },
   "outputs": [],
   "source": [
    "underlyings = {'dax_model' : me_dax}  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "uuid": "590ae8ed-39b9-42a3-84f2-35b2b400d8b8"
   },
   "outputs": [],
   "source": [
    "portfolio = derivatives_portfolio('portfolio', option_positions,\n",
    "                                  val_env, underlyings)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "uuid": "11539da8-35b0-4daf-94ee-52aae7d9fca8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 5min 12s, sys: 29.3 s, total: 5min 41s\n",
      "Wall time: 51.4 s\n"
     ]
    }
   ],
   "source": [
    "%time results = portfolio.get_statistics(fixed_seed=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "uuid": "883fa311-3410-4572-a8d1-a526e2914f69"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>quant.</th>\n",
       "      <th>value</th>\n",
       "      <th>curr.</th>\n",
       "      <th>pos_value</th>\n",
       "      <th>pos_delta</th>\n",
       "      <th>pos_vega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>am_put_12050</td>\n",
       "      <td>37</td>\n",
       "      <td>154.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>5712.7</td>\n",
       "      <td>-4.9</td>\n",
       "      <td>43990.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>am_put_12100</td>\n",
       "      <td>42</td>\n",
       "      <td>163.9</td>\n",
       "      <td>EUR</td>\n",
       "      <td>6885.0</td>\n",
       "      <td>-5.9</td>\n",
       "      <td>57904.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>am_put_12150</td>\n",
       "      <td>49</td>\n",
       "      <td>175.9</td>\n",
       "      <td>EUR</td>\n",
       "      <td>8620.7</td>\n",
       "      <td>-8.0</td>\n",
       "      <td>65080.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>am_put_12200</td>\n",
       "      <td>49</td>\n",
       "      <td>186.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>9135.6</td>\n",
       "      <td>-8.7</td>\n",
       "      <td>68524.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>am_put_12250</td>\n",
       "      <td>31</td>\n",
       "      <td>196.6</td>\n",
       "      <td>EUR</td>\n",
       "      <td>6094.0</td>\n",
       "      <td>-5.8</td>\n",
       "      <td>54333.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>am_put_12300</td>\n",
       "      <td>44</td>\n",
       "      <td>210.8</td>\n",
       "      <td>EUR</td>\n",
       "      <td>9275.1</td>\n",
       "      <td>-9.0</td>\n",
       "      <td>81977.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>am_put_12350</td>\n",
       "      <td>40</td>\n",
       "      <td>226.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>9050.1</td>\n",
       "      <td>-9.0</td>\n",
       "      <td>78761.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>am_put_12400</td>\n",
       "      <td>32</td>\n",
       "      <td>243.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>7784.1</td>\n",
       "      <td>-8.1</td>\n",
       "      <td>66047.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>am_put_12450</td>\n",
       "      <td>49</td>\n",
       "      <td>262.0</td>\n",
       "      <td>EUR</td>\n",
       "      <td>12837.9</td>\n",
       "      <td>-13.9</td>\n",
       "      <td>105053.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>am_put_12500</td>\n",
       "      <td>25</td>\n",
       "      <td>281.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>7034.7</td>\n",
       "      <td>-8.0</td>\n",
       "      <td>56939.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>am_put_12550</td>\n",
       "      <td>16</td>\n",
       "      <td>302.5</td>\n",
       "      <td>EUR</td>\n",
       "      <td>4839.3</td>\n",
       "      <td>-5.5</td>\n",
       "      <td>36598.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>am_put_12600</td>\n",
       "      <td>45</td>\n",
       "      <td>326.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>14688.8</td>\n",
       "      <td>-17.1</td>\n",
       "      <td>105067.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>am_put_12650</td>\n",
       "      <td>46</td>\n",
       "      <td>353.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>16252.8</td>\n",
       "      <td>-19.3</td>\n",
       "      <td>104446.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>am_put_12700</td>\n",
       "      <td>46</td>\n",
       "      <td>380.6</td>\n",
       "      <td>EUR</td>\n",
       "      <td>17509.1</td>\n",
       "      <td>-20.8</td>\n",
       "      <td>107269.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>am_put_12750</td>\n",
       "      <td>19</td>\n",
       "      <td>411.0</td>\n",
       "      <td>EUR</td>\n",
       "      <td>7809.5</td>\n",
       "      <td>-9.4</td>\n",
       "      <td>42384.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>am_put_12800</td>\n",
       "      <td>36</td>\n",
       "      <td>438.5</td>\n",
       "      <td>EUR</td>\n",
       "      <td>15785.9</td>\n",
       "      <td>-18.8</td>\n",
       "      <td>81348.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>am_put_12850</td>\n",
       "      <td>26</td>\n",
       "      <td>471.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>12252.9</td>\n",
       "      <td>-14.5</td>\n",
       "      <td>55255.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>am_put_12900</td>\n",
       "      <td>14</td>\n",
       "      <td>506.1</td>\n",
       "      <td>EUR</td>\n",
       "      <td>7085.0</td>\n",
       "      <td>-8.2</td>\n",
       "      <td>29196.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>am_put_12950</td>\n",
       "      <td>22</td>\n",
       "      <td>542.5</td>\n",
       "      <td>EUR</td>\n",
       "      <td>11934.7</td>\n",
       "      <td>-13.8</td>\n",
       "      <td>42602.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>am_put_13000</td>\n",
       "      <td>18</td>\n",
       "      <td>579.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>10428.5</td>\n",
       "      <td>-11.7</td>\n",
       "      <td>34753.3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            name  quant.  value curr.  pos_value  pos_delta  pos_vega\n",
       "0   am_put_12050      37  154.4   EUR     5712.7       -4.9   43990.0\n",
       "1   am_put_12100      42  163.9   EUR     6885.0       -5.9   57904.1\n",
       "2   am_put_12150      49  175.9   EUR     8620.7       -8.0   65080.3\n",
       "3   am_put_12200      49  186.4   EUR     9135.6       -8.7   68524.0\n",
       "4   am_put_12250      31  196.6   EUR     6094.0       -5.8   54333.7\n",
       "5   am_put_12300      44  210.8   EUR     9275.1       -9.0   81977.3\n",
       "6   am_put_12350      40  226.3   EUR     9050.1       -9.0   78761.0\n",
       "7   am_put_12400      32  243.3   EUR     7784.1       -8.1   66047.0\n",
       "8   am_put_12450      49  262.0   EUR    12837.9      -13.9  105053.3\n",
       "9   am_put_12500      25  281.4   EUR     7034.7       -8.0   56939.1\n",
       "10  am_put_12550      16  302.5   EUR     4839.3       -5.5   36598.5\n",
       "11  am_put_12600      45  326.4   EUR    14688.8      -17.1  105067.5\n",
       "12  am_put_12650      46  353.3   EUR    16252.8      -19.3  104446.8\n",
       "13  am_put_12700      46  380.6   EUR    17509.1      -20.8  107269.3\n",
       "14  am_put_12750      19  411.0   EUR     7809.5       -9.4   42384.2\n",
       "15  am_put_12800      36  438.5   EUR    15785.9      -18.8   81348.8\n",
       "16  am_put_12850      26  471.3   EUR    12252.9      -14.5   55255.0\n",
       "17  am_put_12900      14  506.1   EUR     7085.0       -8.2   29196.1\n",
       "18  am_put_12950      22  542.5   EUR    11934.7      -13.8   42602.5\n",
       "19  am_put_13000      18  579.4   EUR    10428.5      -11.7   34753.3"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results.round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "uuid": "8ceae186-64e2-405d-8563-b6349c0f13b2"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pos_value     201016.3\n",
       "pos_delta       -220.4\n",
       "pos_vega     1317531.8\n",
       "dtype: float64"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results[['pos_value','pos_delta','pos_vega']].sum().round(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>\n",
    "\n",
    "<a href=\"http://tpq.io\" target=\"_blank\">http://tpq.io</a> | <a href=\"http://twitter.com/dyjh\" target=\"_blank\">@dyjh</a> | <a href=\"mailto:training@tpq.io\">training@tpq.io</a>"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
